|
|
1.1 ! root 1: /* ! 2: * Call the system to execute a command line ! 3: * which is passed as an argument. ! 4: */ ! 5: ! 6: #include <stdio.h> ! 7: #include <signal.h> ! 8: ! 9: system(line) ! 10: char *line; ! 11: { ! 12: int status, pid; ! 13: register wpid; ! 14: register int (*intfun)(), (*quitfun)(); ! 15: ! 16: if ((pid = fork()) < 0) ! 17: return (-1); ! 18: if (pid == 0) { /* Child */ ! 19: execl("/bin/sh", "sh", "-c", line, NULL); ! 20: exit(0177); ! 21: } ! 22: intfun = signal(SIGINT, SIG_IGN); ! 23: quitfun = signal(SIGQUIT, SIG_IGN); ! 24: while ((wpid = wait(&status))!=pid && wpid>=0) ! 25: ; ! 26: if (wpid < 0) ! 27: status = wpid; ! 28: signal(SIGINT, intfun); ! 29: signal(SIGQUIT, quitfun); ! 30: return (status); ! 31: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.