c++ - 如何从 C++ 程序内部重新启动 Linux?

标签 c++ linux qt4 reboot suid

我有一个 Qt 4 GUI,我需要在下拉菜单中有一个选项,允许用户选择重新启动计算机。我意识到这似乎与以其他方式重新启动计算机的能力无关,但选择需要留在那里。我尝试使用 system() 调用以下内容:

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

所有这些都只是导致

reboot: must be superuser
要打印。使用 system() 直接调用 reboot 做同样的事情。我并不是特别喜欢使用 system() 来执行此操作,但它似乎是最直接的选择。

如何从 GUI 重新启动系统?

最佳答案

reboot 功能在 Linux Programmer's Manual 中描述。 .在 glibc 下,您可以传递 RB_AUTOBOOT 宏常量来执行重启。

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

Linux 中使用 glibc:

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

sync();
reboot(RB_AUTOBOOT);

关于c++ - 如何从 C++ 程序内部重新启动 Linux?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678766/

相关文章:

linux - 权限被拒绝 - 静态 Lxml 构建失败 - Plone - CentOS

python - 如何从 QListWidget 中删除 QListWidgetItem 并刷新显示?

c++ - 连接 Qt 应用程序中的 GUI 和计算

c++ - 初始化矩阵和访问其数据的不同方法

c++ - 在 shell 中为 make 设置 GCC 版本

c - 如何在没有拒绝服务漏洞的情况下安全打开常规文件?

c++ - 无法使用 Microsoft 编译器编译 Qt

c++ - 如何专门化模板类中的模板成员函数?

c++ - Qt Creator 不打开终端

linux - 在Linux上创建用户并分配密码