如何使用C检索linux下的正常运行时间? (不使用popen和/或/ proc)
由于
答案 0 :(得分:21)
通过top
或uptime
,但我不知道任何系统调用,有人肯定会:)
uptime
应该很容易解析。
偶然发现了这个:
#include <sys/sysinfo.h>
struct sysinfo info;
sysinfo(&info);
printf("Uptime = %ld\n", info.uptime);
答案 1 :(得分:2)
如果在那里并且包含成员uptime
,则struct sysinfo
是首选的方式,Jack explained。
另一种方法是从btime
中读取/proc/stat
,然后从当前时间中删除它。 btime
只是一个UNIX纪元,表明内核何时启动。
这为您提供自启动以来的秒数,然后您可以将其转换为年/月/日/小时/等。这样可以节省/proc/uptime
中的字符串。如果不存在btime
且struct sysinfo
没有名为uptime
的成员,则必须解析/proc/uptime
。
对于现代内核,sysinfo()
应该可以正常工作。大多数仍在运行2.4(或更早)的东西都是某种类型的设备或其他嵌入式系统。
答案 2 :(得分:1)
为了以更便携的方式获得系统启动时间,将使用“who -b”。要在程序中使用它,您必须生成一个shell并解释其输出。不幸的是,这似乎是唯一可以在POSIX中获得此类信息的地方,这也只是作为扩展。