如何从C++程序中重启Linux?

Dav*_*e K 13 c++ linux reboot qt4 suid

我有一个Qt 4 GUI,我需要在下拉菜单中有一个选项,允许用户选择重新启动计算机.我意识到这可能看起来不太重要,能够以其他方式重新启动计算机,但选择需要留在那里.我尝试使用system()来调用以下内容:

  1. 一个suid-root shell脚本
  2. 一个非suid shell脚本
  3. 一个suid-root二进制程序

而且所有这些都是因为

reboot: must be superuser
打印.使用system()直接调用reboot会做同样的事情.我并不特别喜欢使用system()来做这件事,但它似乎是最直接的选择.

如何从GUI重启系统?

Vil*_*ray 9

程序rebootLinux程序员手册中有所描述.在glibc下,您可以传递RB_AUTOBOOT宏常量来执行重新启动.

请注意,如果reboot之前没有调用sync,则数据可能会丢失.

Linux中使用glibc:

#include <unistd.h>
#include <sys/reboot.h>

sync();
reboot(RB_AUTOBOOT);
Run Code Online (Sandbox Code Playgroud)


小智 7

在Linux中:

#define LINUX_REBOOT_CMD_POWER_OFF 0x4321fedc   

sync();
reboot(LINUX_REBOOT_CMD_POWER_OFF);
Run Code Online (Sandbox Code Playgroud)

  • 如果你正在使用glibc版本,#include <sys/reboot.h>应该包含在上面的代码中...如果是这样,只需在该头文件中使用#define RB_POWER_OFF ... (5认同)

Jos*_*ury 4

您是否尝试过使用 gksudo 运行 shell 脚本?就像是

gksudo shutdown -r
Run Code Online (Sandbox Code Playgroud)

运气好的话,应该会弹出一个模式对话来获取用户凭据。