Uptime под linux в C

Как я могу восстановить время работы в Linux с помощью C? (без использования popen и/или/proc)

Спасибо

Ответ 1

Через top или через uptime, но я не знаю ни о каком syscall, кто-то наверняка:)

uptime должно быть довольно легко разобрать.

Просто наткнулся на это:

#include <sys/sysinfo.h>

struct sysinfo info;
sysinfo(&info);
printf("Uptime = %ld\n", info.uptime);

Ответ 2

Если его там и содержит член uptime, struct sysinfo - это предпочтительный способ перехода, поскольку объяснил Джек.

Другой способ - прочитать btime out of /proc/stat, а затем просто вычесть его из текущего времени. btime - это всего лишь эпоха UNIX, указывающая, когда ядро ​​загрузилось.

Это дает вам количество секунд с момента загрузки, которые затем можно перевести на годы/месяцы/дни/часы/и т.д. Это экономит необходимость иметь дело со строками в /proc/uptime. Если btime не существует, а struct sysinfo не имеет члена с именем uptime, вам нужно проанализировать /proc/uptime.

Для современных ядер sysinfo() должен работать нормально. Большинство вещей, все еще работающих 2.4 (или раньше) в дикой природе, являются устройствами какого-либо типа или других встроенных систем.

Ответ 3

Чтобы получить начальное время системы более переносимым способом, было бы использовать "who -b". Чтобы использовать это в программе, вам придется порождать оболочку и интерпретировать ее вывод. К сожалению, это единственное место, где такая информация доступна в POSIX, и это также только как расширение.