#include #include #include #include #include #include "init.h" int main(int argc,char * argv[]){ int sock; struct sockaddr_un name; char *p; struct initcmd cmd; if(argc != 2){ printf("Usage: %s {0,1,2,3...,H,R}\n",argv[0]); exit(EXIT_FAILURE); } cmd.data = strtol(argv[1],&p,0); if(p == argv[1]){ switch(argv[1][0]){ case 'H': case 'h': cmd.data = HALTRL; break; case 'R': case 'r': cmd.data = REBOOTRL; break; default: cmd.data = INVALRL; break; } } if(cmd.data < 0 && cmd.data != REBOOTRL && cmd.data != HALTRL){ printf("Invalid runlevel: %s\n",argv[1]); exit(EXIT_FAILURE); } cmd.command = NEWLEVEL; sock = socket(PF_LOCAL,SOCK_DGRAM,0); if(sock < 0){ perror("socket"); exit(EXIT_FAILURE); } name.sun_family = AF_LOCAL; strncpy(name.sun_path,SOCK_PATH,sizeof(name.sun_path)); if(connect(sock,(struct sockaddr*)&name,SUN_LEN(&name))<0){ perror("connect"); exit(EXIT_FAILURE); } if(write(sock,&cmd,sizeof(cmd))