Uptime под Linux в C - PullRequest
       9

Uptime под Linux в C

11 голосов
/ 18 июня 2010

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

Спасибо

Ответы [ 3 ]

21 голосов
/ 18 июня 2010

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

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

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

#include <sys/sysinfo.h>

struct sysinfo info;
sysinfo(&info);
printf("Uptime = %ld\n", info.uptime);
2 голосов
/ 18 июня 2010

Если он там и содержит член uptime, struct sysinfo является предпочтительным способом, как объяснил Джек .

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

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

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

1 голос
/ 18 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...