halt.c (748B)
1 /* See LICENSE file for copyright and license details. */ 2 #include <sys/syscall.h> 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <unistd.h> 7 8 #include "reboot.h" 9 #include "util.h" 10 11 static void 12 usage(void) 13 { 14 eprintf("usage: %s [-pr]\n", argv0); 15 } 16 17 int 18 main(int argc, char *argv[]) 19 { 20 int pflag = 0, rflag = 0; 21 int cmd = LINUX_REBOOT_CMD_HALT; 22 23 ARGBEGIN { 24 case 'p': 25 pflag = 1; 26 break; 27 case 'r': 28 rflag = 1; 29 break; 30 default: 31 usage(); 32 } ARGEND; 33 34 if (argc > 0) 35 usage(); 36 37 sync(); 38 39 if (pflag && rflag) 40 usage(); 41 42 if (pflag) 43 cmd = LINUX_REBOOT_CMD_POWER_OFF; 44 if (rflag) 45 cmd = LINUX_REBOOT_CMD_RESTART; 46 47 if (syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, 48 LINUX_REBOOT_MAGIC2, cmd, NULL) < 0) 49 eprintf("reboot:"); 50 return 0; 51 }