Как я могу восстановить время работы под Linux с помощью C? (Без использования POPEN и/или/Proc)Uptime под linux в C
Благодаря
Как я могу восстановить время работы под Linux с помощью C? (Без использования POPEN и/или/Proc)Uptime под linux в C
Благодаря
Via top
или через uptime
, но я не знаю о каких-либо системного вызова, кто-то наверняка :)
uptime
должно быть довольно легко для синтаксического анализа.
Просто наткнулся на это:
#include <sys/sysinfo.h>
struct sysinfo info;
sysinfo(&info);
printf("Uptime = %ld\n", info.uptime);
Если его там и содержит элемент uptime
, struct sysinfo
является предпочтительным способом пойти, так как Jack explained.
Другой способ - читать btime
из /proc/stat
, а затем просто вычесть его из текущего времени. btime
- это всего лишь эпоха UNIX, указывающая, когда ядро загрузилось.
Это дает вам количество секунд с момента загрузки, которые затем можно перевести на годы/месяцы/дни/часы/и т. Д. Это экономит на то, чтобы иметь дело со строками в /proc/uptime
. Если btime
не существует, а struct sysinfo
не имеет ни одного участника с именем uptime
, вам нужно разобрать /proc/uptime
.
Для современных ядер sysinfo()
должен работать нормально. Большинство вещей, все еще работающих 2.4 (или раньше) в дикой природе, являются устройствами какого-либо типа или других встроенных систем.
Чтобы получить начальное время системы более переносимым способом, было бы использовать «who -b». Чтобы использовать это в программе, вам придется порождать оболочку и интерпретировать ее вывод. К сожалению, это единственное место, где такая информация доступна в POSIX, и это также только как расширение.
Horray для sysinfo() :) NB: 'struct sysinfo' довольно« сдвинутый »между 2.4 (ранним) 2.4 (поздним) и 2.6. Если ваш код, скорее всего, будет использоваться для устройств, его можно запустить, чтобы проверить, какие члены могут отличаться. –
printf ("Время работы:% 02ld:% 02ld:% 02ld \ n", info.uptime/3600, info.uptime% 3600/60, info.uptime% 60); –
Однако '', похоже, не существует, когда вы компилируете ядро (vagrant & trusty64):/Как это сделать в этой ситуации? –
Emixam23