xv6--一个类Unix的教学用操作系统

第1.2节 I/O和文件描述符

2020-10-20  本文已影响0人  橡树人

问题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:为什么forkexec是两个分开的、单独的系统调用?

因为只有这样,才有可能在两个调用之间,在不影响主shell的I/O设置的情况下,对子进程进行I/O重定向。

上一篇 下一篇

猜你喜欢

热点阅读