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

作者: 橡树人 | 来源:发表于2020-10-20 07:52 被阅读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重定向。

相关文章

  • 异步I/O—事件循环机制

    I/O简介 1.I/O操作:内核在进行文件I/O操作时,通过文件描述符(fd:一个整数—应用程序和内核之间的凭证)...

  • 2.C标准I/O

    2 C 标准I/O 2.1 文件指针 标准I/O并不直接操作文件描述符,而是通过文件指针(file pointer...

  • I/O 多路复用

    什么是 I/O 多路复用:I/O 多路复用指的是可以通过某种机制,监视多个文件描述符,一旦某个文件描述符准备就绪后...

  • apue 第三章 文件I/O

    apue 第三章 文件I/O 文件描述符 对于内核,所有打开的文件都通过文件描述符引用 STDIN_FILEOUT...

  • 【Linux/Unix系统编程手册笔记】文件I/O

    1.文件描述符 所有执行I/O操作的系统调用都以文件描述符(一个非负整数)来指代打开的文件。文件描述符用以表示所有...

  • I/O复用 select/poll/epoll

    转载自I/O复用 select/poll/epoll 一、概述 I/O复用使得程序能同时监听多个文件描述符,这对提...

  • APUE读书笔记-14高级输入输出(4)

    5、多I/O 当我们从一个文件描述符号读取,写入到另外一个文件描述符号的时候,我们可以在一个循环中使用"阻塞"I/...

  • 系统与网络编程-(项目前准备)

    系统与网络编程 select函数 select和pselect多用于I/O操作,他们见识多个文件描述符的集合,判断...

  • linux手册翻译——epoll(7)

    epoll — I/O 事件通知机制 epoll API与poll具有相同功能:监视多个文件描述符,以查看这些文件...

  • 异步IO(待修正)

    ** 操作系统将所有的输入输出设备抽象为文件, 在进行I/O操作时实际上要先获取文件描述符, 然后根据文件描述符进...

网友评论

    本文标题:第1.2节 I/O和文件描述符

    本文链接:https://www.haomeiwen.com/subject/dgyrmktx.html