Как я могу получить время работы в соответствии с Linux с помощью C? (не используя popen и/или/proc)
Спасибо
Через вверху
или через время безотказной работы
, но Я не знаю ни о каком системном вызове, кто-то точно узнает :)
uptime
должно быть довольно легко проанализировать.
Только что наткнулся на это:
#include <sys/sysinfo.h>
struct sysinfo info;
sysinfo(&info);
printf("Uptime = %ld\n", info.uptime);
Чтобы получить время запуска системы более переносимым способом, можно использовать «who -b». Чтобы использовать это в программе, вам нужно создать оболочку и интерпретировать ее вывод. К сожалению, это единственное место, где такая информация доступна в POSIX, и это тоже только как расширение.
Если он там и содержит элемент uptime
, struct sysinfo
является предпочтительным способом, как объяснил Джек .
Другой способ - прочитать btime
из / proc / stat
, а затем просто вычесть его из текущего времени. btime
- это просто эпоха UNIX, указывающая, когда загружалось ядро.
Это дает вам количество секунд с момента загрузки, которое затем можно перевести в годы / месяцы / дни / часы / и т. Д. Это избавляет от необходимости иметь дело со строками в / proc / uptime
. Если btime
там нет, а struct sysinfo
не имеет члена с именем uptime
, вам необходимо проанализировать / proc / uptime
.
Для современных ядер sysinfo ()
должна работать нормально. Большинство вещей, которые все еще работают под управлением 2.4 (или более ранней версии), представляют собой устройства того или иного типа встраиваемых систем.