(1).
Shell编写需要涉及到许多系统调用,如:
fork(), exec(), wait()
而系统调用失败时,一般都不输出错误信息,所以在代码中包含错误处理对debug非常重要,如:
if (execlp("ls", "ls", (char *)0) == -1) {
perror("execlp");
exit(EXIT_FAILURE);
}
若不包含错误处理,exec()失败也无从知晓,debug更不知道从何处入手。
(2).
实现多管道连结,如:
ls | sort | wc
管道间的命令为一个子进程,子进程结束之前都要把所有的文件描述关闭,否则子进程无法完成,父进程无限等待。
此处有一个multiple pipes的例子。
Shell编写需要涉及到许多系统调用,如:
fork(), exec(), wait()
而系统调用失败时,一般都不输出错误信息,所以在代码中包含错误处理对debug非常重要,如:
if (execlp("ls", "ls", (char *)0) == -1) {
perror("execlp");
exit(EXIT_FAILURE);
}
若不包含错误处理,exec()失败也无从知晓,debug更不知道从何处入手。
(2).
实现多管道连结,如:
ls | sort | wc
管道间的命令为一个子进程,子进程结束之前都要把所有的文件描述关闭,否则子进程无法完成,父进程无限等待。
此处有一个multiple pipes的例子。