/* ECP: FILEname=fig13_19.c */ /* 1*/ #include /* Other Includes Omitted For Brevity */ /* 2*/ int /* 3*/ RealSystem( const char *Command ) /* 4*/ { /* 5*/ pid_t Pid; /* 6*/ int Status; /* 7*/ void ( *SaveIntr )( ), ( *SaveQuit )( ); /* 8*/ if( Command == NULL ) /* 9*/ return 1; /*10*/ SaveIntr = signal( SIGINT, SIG_IGN ); /* Ignore */ /*11*/ SaveQuit = signal( SIGQUIT, SIG_IGN ); /* Signals */ /*12*/ Pid = fork( ); /*13*/ if( Pid < 0 ) /* Error */ /*14*/ return -1; /*15*/ if( Pid == 0 ) /* Child */ /*16*/ { /*17*/ signal( SIGINT, SaveIntr ); /* Restore */ /*18*/ signal( SIGQUIT, SaveQuit ); /* Signals */ /*19*/ execl( "/bin/sh", "sh", "-c", Command, NULL ); /*20*/ _exit( 127 ); /* execl Failed; Give Up On Child */ /*21*/ } /*22*/ /* Parent */ /*23*/ waitpid( Pid, &Status, 0 ); /*24*/ signal( SIGINT, SaveIntr ); /* Restore */ /*25*/ signal( SIGQUIT, SaveQuit ); /* Signals */ /*26*/ return Status; /*27*/ }