第三章

3-1 使用Linux转有的reboot()系统调用重启系统时,必须讲第二个参数magic2定义为一组magic号之一。这些magic号有什么意义?

我们可以使用如下代码来执行重启。

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

int main(){
    reboot(RB_AUTOBOOT);
    return 0;
}

将文件保存为reboot.c,使用gcc reboot.c命令进行编译。然后运行sudo ./a.out,此时可以看到系统进行了重启。不使用root权限无法重启。

RB_AUTOBOOT 是定义在reboot.h头文件中的。如果我们换成RB_POWER_OFF 则系统直接关机。下面是该头文件节选。

/* Perform a hard reset now.  */
#define RB_AUTOBOOT    0x01234567

/* Stop system and switch power off if possible.  */
#define RB_POWER_OFF    0x4321fedc

在其他的Linux中,我们也可以使用如下的程序进行重启。可惜这段代码在deepin中无法编译通过。

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

int main(){
    reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2A, LINUX_REBOOT_CMD_RESTART, 0);
    return 0;
}

这里的LINUX_REBOOT_MAGIC1LINUX_REBOOT_MAGIC2A参数在linux/reboot.h中被定义。如果我们不传入这样的参数,则功能不会执行。

至于这些参数是什么意义,除了防止误调用,是Linux的作者Linus Torvalds自己和他三个女儿的生日。

results matching ""

    No results matching ""