gpt4 book ai didi

c - 如何使用C语言的linux restart功能来关闭Linux(Ubuntu)系统?

转载 作者:行者123 更新时间:2023-11-30 20:03:14 28 4
gpt4 key购买 nike

我正在制作一个 c 程序来关闭 Ubuntu,而无需使用 following link 进行系统调用.

code.c
#include <unistd.h>
#include <sys/reboot.h>
int main() {
reboot(RB_POWER_OFF);
}
gcc code.c -o out.exe

这里,如果我以 root 用户身份运行这个可执行文件(out.exe),那么它只会关闭系统,如果我在普通用户模式下运行相同的文件,它就不起作用。所以为了在普通用户模式下运行此代码,我必须对代码进行哪些更改?

最佳答案

由于多种原因,最好使用以下命令关闭机器电源

execl("/bin/shutdown", "shutdown", "-P", "now", (char *)0);

或使用重新启动

execl("/bin/shutdown", "shutdown", "-r", "now", (char *)0);

根本不涉及任何 shell。当前进程被替换为 shutdown 系统管理命令,如果正在运行的进程的用户被允许关闭或重新启动机器,则该命令已经拥有必要的权限。

(也就是说,除非系统实用程序丢失,否则上述语句后面的代码根本不会执行。它会出现在任何正常运行的系统上,甚至是嵌入式系统上。)

您甚至可以替换 "now"使用固定字符串,如 "+1m" ,一分钟后关闭或重新启动。 (在此期间,其他所有内容将继续正常运行。在此期间仅使用 shutdown 参数运行 -c 将取消挂起的关闭/重新启动。)

如果您从 GUI 应用程序执行此操作,则只能在正常程序执行 return 的地方执行此操作。来自main() ,或exit() .

<小时/>

这些原因是什么?

简单性、稳健性、最小意外原则、正确管理关闭/重新启动的权限、不需要特殊权限,从而减少威胁面(程序中的错误不太可能授予特殊权限,因为没有特殊权限)。对于初学者。

关于c - 如何使用C语言的linux restart功能来关闭Linux(Ubuntu)系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53531250/

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