|
|
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.