1.Linux下c程序通过调用reboot()函数,可以实现系统的重启、挂机、Power Down等功能。
2.(1)对于libc5或libc4来说,库函数的原型声明中包含四个参数,具体函数原型声明如下:
#include<unistd.h>
#include<linux/reboot.h>
int reboot(int magic,int magic2,int cmd,void *arg);
(2)对于glibc来说,此函数的原型声明中只包含一个参数:
#include<unistd.h>
#include<sys/reboot.h>
int reboot(int cmd);
3.除非magic等于LINUX_REBOOT_MAGIC1,magic2等于LINUX_REBOOT_MAGIC2(LINUX_REBOOT_MAGIC2A(2.1.17版本)、 LINUX_REBOOT_MAGIC2B(2.1.97版本)、LINUX_REBOOT_MAGIC2C(2.5.71)),否则系统调用将失败。
注: #define LINUX_REBOOT_MAGIC1 0xfee1dead、#define LINUX_REBOOT_MAGIC2 28121969
#define LINUX_REBOOT_MAGIC2A 5121996 #define LINUX_REBOOT_MAGIC2B 16041998 #define LINUX_REBOOT_MAGIC2 20112000
每个宏变量实际意义是版本发行时间。
4.关于cmd参数可以的取值如下:
(1)LINUX_REBOOT_CMD_RESTART (RB_AUTOBOOT, 0x1234567). "Restarting system."消息将会被打印。
(2) LINUX_REBOOT_CMD_HALT (RB_HALT_SYSTEM,0x4321fedc; since 2.1.30). "Power down."消息将会被打印。
(3) LINUX_REBOOT_CMD_RESTART2 (0xa1b2c3d4; since 2.1.30)。"Restarting system with command '%s'"被打印。
(4) LINUX_REBOOT_CMD_CAD_OFF (RB_DISABLE_CAD, 0)。CAD is disabled. This means that the CAD keystroke will cause a SIGINT signal to be sent to init (进程号为1) whereupon this process may decide upon a proper action (maybe: kill all processes, sync, reboot).
(5) LINUX_REBOOT_CMD_CAD_ON (RB_ENABLE_CAD, 0x89abcdef). CAD is enabled. This means that the CAD keystroke will immediately cause the action associated with LINUX_REBOOT_CMD_RESTART.
5.函数返回值
(1)当cmd参数取LINUX_REBOOT_CMD_RESTART或LINUX_REBOOT_CMD_RESTART2或LINUX_REBOOT_CMD_HALT时,reboot()函数调用成功时无返回值,失败时返回-1.
(2)当cmd参数取其他值时,reboot()函数调用成功时返回0,失败返回-1.
6.使用的宏定义
NOTES:(1)不同版本的Linux,所定义的宏定义值可能存在细微差别,可以查看/usr/include/sys/reboot.h或/usr/include/linux/reboot.h获取具体信息。(2)以上内容为本人的个人理解,可能存在理解不当的地方,望指定。