書本知識夠你寫出答案,但是如果你想驗證你寫的答案,就要一些額外的東西.這本書很多題目都是如此
/** mysystem.c*/
#include <stdio.h>
#include "csapp.h"int mysystem(char* command) {pid_t pid;int status;if ((pid = Fork()) == 0) {/*這里是關鍵用子程序去加載sh */char* argv[4] = { "", "-c", command, NULL };execve("/bin/sh", argv, environ);}/* print child pid so we can kill it */printf("child pid: %d\n", pid);if (Waitpid(pid, &status, 0) > 0) {/* exit normally */if (WIFEXITED(status))return WEXITSTATUS(status);/* exit by signal */if (WIFSIGNALED(status))return WTERMSIG(status);}
}int main(int argc, char* argv[]) {int code;code = mysystem("./exit-code");printf("normally exit, code: %d\n", code); fflush(stdout);code = mysystem("./wait-sig");printf("exit caused by signal, code: %d\n", code); fflush(stdout);return 0;
}
/** wait-sig.c*/
#include "csapp.h"int main(int argc, char* argv[]) {while (1);
}
/** exit-code.c*/
#include "csapp.h"int main(int argc, char* argv[]) {exit(10);
}