REBOOT(2)

이름
reboot - 재시작 혹은 Ctrl-Alt-Del의 사용/사용안함

사용법
libc4과libc5에게 라이브러리 호출과 시스템 호출은 동일시 되고, 커널 버전 2.1.30이후로 호출을 위한 상수와 네번째 독립변수로서 symbolic names LINUX_REBOOT_*가 있다:

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

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

glibc하에서 어떤 복잡한 상수는 symbolic names RB_*를 가지고, 라이브러리 호출은 3-도립변수 시스템 호출 주변에 1-argument wrapper이다:

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

int reboot (int flag);

설명
reboot 호출은 시스템을 재시작하거나, 재시작 키입력을 가능/불가능 하게 한다. (간결하게 된 CAD, 디폴트는 Ctrl-Alt-Delete이기 때문에; loadkeys(1)). 사용으로 바꿀 수 있다.

이 시스템 호출은(EINVAL와 함께) magic 가 LINUX_REBOOT_MAGIC1 (이것은 0xfee1dead)와 같고 magic2 가 LINUX_REBOOT_MAGIC2 (이것은 672274793)와 같지 않으면 실패할 수 있다. 하지만, 2.1.17이후의 LINUX_REBOOT_MAGIC2A (이것은 85072278)와 2.1.97이후의 LINUX_REBOOT_MAGIC2B (이것은 369367448)은 magic2. 의 값으로 여겨진다.(이 상수의 16진수 값은 의미심장한 것이다.) flag 독립변수는 아래와 같은 값을 가질 수 있다:

LINUX_REBOOT_CMD_RESTART
    (RB_AUTOBOOT, 0x1234567). `Restarting system' (시스템 재시작) 메시지가 출력된다. 그리고 디폴트 재시작이 곧 실행된다. sync(2) 가 선행되지 않으면, 자료가 사라진다.

LINUX_REBOOT_CMD_HALT
    (RB_HALT_SYSTEM, 0xcdef0123; since 1.1.76). 하나 있다면, 제어는 ROM 모니터에게 넘어간다. sync(2) 가 선행되지 않으면 자료가 사라진다.

LINUX_REBOOT_CMD_POWER_OFF
    (0x4321fedc; since 2.1.30). `Power down'(전원 꺼짐) 메시지가 출력된다. 그리고 시스템이 멈추고, 가능하면 시스템의 모든 파워가 사라진다. sync(2) 가 선행되지 않으면 자료가 사라진다.

LINUX_REBOOT_CMD_RESTART2
    (0xa1b2c3d4; since 2.1.30). `Restarting system with command '%s''메시지가 출력되고 곧 재시작 한다.
     (.IR 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 키 입력이 init (process 1)에 보내지는 SIGINT 신호를 발생시킨다. 그래서 프로세스는 고유의 역할을 결정한다.(아마: 모든 프로세스 중단. sync, 재시작)

슈퍼 유저만이 이 함수를 사용할 수 있다.

위의 작동이 정확한 효과를 나타내는 것은 구조에 달려 있다. i386 구조에서. 추가 독립변수는 현재(2.1.122) 아무런 작용도 하지 않는다. 하지만 커널 명령 라인 독립변수에 의해 재시작의 타입이 warm 부팅 혹은 cold 부팅으로 결정 될 수 있다.

반환값
성공시, 0이 반환된다. 에러 시, -1이 반환되고, errno 는 적절히 설정된다.

에러

EINVAL
    부적당한 매직 넘버 혹은 flag.

EPERM
    루트 사용자가 아닌 사람이 reboot. 를 호출하려 하였다.

호환
reboot 는 리눅스에 특화되어 있으므로 이식을 목적으로 하는 프로그램에선 사용하면 안된다.

관련 항목
sync(2), bootparam(7), ctrlaltdel(8), halt(8), reboot(8)

역자
ASPLINUX<man@asp-linux.co.kr>, 2000년 7월 31