reboot() - Unix,Linux系统调用
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix有用参考
  Unix有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论论坛     关于TP  

reboot() - Unix,Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

reboot - 重启或启用/禁用Ctrl-Alt-Del

概要

对于libc4和libc5,库调用和系统调用是相同的,并且从内核版本2.1.30开始,常量具有符号名称LINUX_REBOOT_*,并且调用具有第四个参数。

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

int reboot(int magic, int magic2, int flag, void *arg);

在glibc下,一些相关的常量获得了符号名称RB_*,库调用是围绕3参数系统调用的1参数包装器。

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

int reboot(int flag);

描述

reboot()调用重新启动系统,或启用/禁用重启按键(缩写为CAD,因为默认值为Ctrl-Alt-Delete;可以使用loadkeys(1)更改)。

除非magic等于LINUX_REBOOT_MAGIC1(即0xfee1dead)并且magic2等于LINUX_REBOOT_MAGIC2(即672274793),否则此系统调用将失败(返回EINVAL)。但是,从2.1.17开始,LINUX_REBOOT_MAGIC2A(即85072278)也被允许作为magic2的值,从2.1.97开始,LINUX_REBOOT_MAGIC2B(即369367448)也被允许,从2.5.71开始,LINUX_REBOOT_MAGIC2C(即537993216)也被允许。(这些常量的十六进制值是有意义的。)flag参数可以具有以下值:

标签描述
LINUX_REBOOT_CMD_RESTART
 (RB_AUTOBOOT, 0x1234567)。将打印消息“正在重启系统”,并将立即执行默认重启。如果没有在sync(2)之前执行,数据将丢失。
LINUX_REBOOT_CMD_HALT
 (RB_HALT_SYSTEM, 0xcdef0123;从1.1.76开始)。将打印消息“系统已停止”,并且系统已停止。如果存在,则控制权将交给ROM监视器。如果没有在sync(2)之前执行,数据将丢失。
LINUX_REBOOT_CMD_POWER_OFF
 (0x4321fedc;从2.1.30开始)。将打印消息“关机”,系统将停止,并且如果可能,将从系统中移除所有电源。如果没有在sync(2)之前执行,数据将丢失。
LINUX_REBOOT_CMD_RESTART2
 (0xa1b2c3d4;从2.1.30开始)。将打印消息“使用命令'%s'重启系统”,并将立即执行重启(使用arg中给出的命令字符串)。如果没有在sync(2)之前执行,数据将丢失。
LINUX_REBOOT_CMD_CAD_ON
 (RB_ENABLE_CAD, 0x89abcdef)。启用CAD。这意味着CAD按键将立即导致与LINUX_REBOOT_CMD_RESTART关联的操作。
LINUX_REBOOT_CMD_CAD_OFF
 (RB_DISABLE_CAD, 0)。禁用CAD。这意味着CAD按键将导致SIGINT信号发送到init(进程1),之后此进程可以决定适当的操作(可能是:终止所有进程,同步,重启)。
只有超级用户可以使用此函数。

上述操作的精确效果取决于体系结构。对于i386体系结构,附加参数目前没有任何作用(2.1.122),但是重启类型可以通过内核命令行参数('reboot=...')确定为热重启或冷重启,以及硬重启或通过BIOS重启。

返回值

成功时,返回零。出错时,返回-1,并且errno被适当地设置。

错误

标签描述
EFAULT 在LINUX_REBOOT_CMD_RESTART2下获取用户空间数据时出现问题。
EINVAL 错误的幻数或flag
EPERM 调用进程没有足够的权限来调用reboot();需要CAP_SYS_BOOT能力。

符合标准

reboot()是Linux特有的,不应在旨在可移植的程序中使用。

参见



previous next Printer Friendly

广告


  

广告



广告