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

廣告


  

廣告



廣告