Если его там и содержит член 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, и это также только как расширение.