我从文件/ proc / uptime获得Linux正常运行时间。从哪里获得机器的最后关机时间。如何从" c"中的wtmp文件中读取它。我不想要最后一个-x命令的解析输出。我可以使用sysctl吗?
谢谢!
答案 0 :(得分:3)
在Linux上,这种数据是通过getutent
api调用访问的。您可以使用utmpname
设置文件名,并使用getutent
获取登录历史记录中的每个条目。
有关API结帐的详情http://linux.die.net/man/3/getutent
文件的格式在http://linux.die.net/man/5/utmp
中描述修改
有关具体如何获取关机时间的信息,请查看API返回的ut_user
的{{1}},如果是struct utmp
,请执行某些操作,例如循环使用此代码通过文件中的所有条目:
shutdown
以下代码成功识别了我系统上的所有关闭条目:
struct utmp *u = getutent();
if (strncmp(u>ut_user, "shutdown", 8) == 0) {
// parse the shutdown time in u->ut_time
}
我的系统输出:
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <utmp.h>
int main(void)
{
struct utmp *u;
int ret;
ret = utmpname("/var/log/wtmp");
if (ret < 0) {
perror("utmpname");
return 1;
}
while (true) {
u = getutent();
if (!u) {
perror("getutent");
break;
}
if (strncmp(u->ut_user, "shutdown", 8) == 0) {
time_t t = u->ut_time;
struct tm *tm = localtime(&t);
char timestr[128];
strftime(timestr, sizeof timestr, "%a %b %d %T %Y", tm);
printf("%s: %s\n", u->ut_user, timestr);
}
}
return 0;
}