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