我是这个论坛的新手,我想问专家们一个问题。
我编写了以下程序(这是更大的事情的一部分,但这是引起我麻烦的代码)

#include <unistd.h>
#include <fcntl.h>

int main()
{
    int fd;
    fd = open("/dev/watchdog",O_RDONLY);
    lseek(fd,0,SEEK_END);
    return 0;
}

让我感到困扰的是,当我以root身份运行该程序后,在20到30秒后,系统崩溃了,我似乎无法弄清楚为什么。普通用户不会发生这种情况。
您能在这个问题上启发我吗?

谢谢!

PS。是的,我知道/ dev / watchdog是一个字符文件,它不是可搜索的,但这似乎很奇怪。

最佳答案

看起来/ dev / watchdog正在执行其应做的事情。打开/ dev / watchdog后,必须继续对其进行写入,否则系统将重新启动。造成崩溃的可能不是lseek,而是缺乏写作。有关更多信息,请参见Linux的看门狗手册。

当您以非root用户身份运行时,打开/ dev / watchdog可能只是失败了,因此系统没有重新启动。您的代码没有检查来自open()的错误。

09-09 21:02