Linux下特有的reboot()函数的简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhanghui962623727/article/details/73742922

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.使用的宏定义

--------------------------------------------
#define    LINUX_REBOOT_CMD_RESTART     0x01234567
#define    LINUX_REBOOT_CMD_HALT        0xCDEF0123
#define    LINUX_REBOOT_CMD_CAD_ON      0x89ABCDEF
#define    LINUX_REBOOT_CMD_CAD_OFF     0x00000000
#define    LINUX_REBOOT_CMD_POWER_OFF   0x4321FEDC
#define    LINUX_REBOOT_CMD_RESTART2    0xA1B2C3D4
#define    LINUX_REBOOT_CMD_SW_SUSPEND  0xD000FCE2

NOTES:(1)不同版本的Linux,所定义的宏定义值可能存在细微差别,可以查看/usr/include/sys/reboot.h或/usr/include/linux/reboot.h获取具体信息。(2)以上内容为本人的个人理解,可能存在理解不当的地方,望指定。

猜你喜欢

转载自blog.csdn.net/zhanghui962623727/article/details/73742922