gpt4 book ai didi

c - Linux:以编程方式获取系统关机时间?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:17 25 4
gpt4 key购买 nike

我从文件/proc/uptime 获取 Linux 正常运行时间。从哪里获得机器的上次关机时间。如何从“c”中的 wtmp 文件中读取它。我不想解析 last -x 命令的输出。我可以使用 sysctl 吗?

最佳答案

在 Linux 上,这种数据是通过 getutent api 调用访问的。您可以使用 utmpname 设置文件名,并使用 getutent 获取登录历史记录中的每个条目。

有关 API 结帐的详细信息 http://linux.die.net/man/3/getutent

文件的格式在 http://linux.die.net/man/5/utmp 中描述。

编辑

具体如何获取关机时间,查看API返回的struct utmput_user,如果是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;
}

我的系统输出:

shutdown: Tue Mar 08 00:13:00 2016
shutdown: Sat Mar 12 08:45:57 2016
shutdown: Sat Mar 19 09:55:49 2016
shutdown: Wed Mar 23 16:24:39 2016
....

关于c - Linux:以编程方式获取系统关机时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36929990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com