问题1:如何实现从标准读取数据,然后拷贝数据到标准输出?
char buf[512];
int n;
for(;;){
n = read(0, buf, sizeof buf);
if(n == 0)
break;
if(n < 0){
fprintf(2, "read error\n");
exit(1);
}
if(write(1, buf, n) != n){
fprintf(2, "write error\n");
exit(1);
}
}
问题2:如何实现I/O重定向,比如cat < input.txt
?
char *argv[2];
argv[0] = "cat";
argv[1] = 0;
if(fork() == 0) {
close(0);
open("input.txt", O_RDONLY);
exec("cat", argv);
}
问题3:为什么fork
和exec
是两个分开的、单独的系统调用?
因为只有这样,才有可能在两个调用之间,在不影响主shell的I/O设置的情况下,对子进程进行I/O重定向。
网友评论