【linux编程实践教程(Bruce Molay)】第十章 IO重定向和管道

一 shell编程

  1. comm命令:比较两个文件是否相等
    在这里插入图片描述

二 IO重定向

1-基础

  1. 很多Unix命令都被称为Unix工具
  2. 一个进程(一个使用中的命令)都会产生一个存放文件描述符的数组,该数组中的下标就是文件描述符的号,0,1,2三位是进程的标准输入输出和错误流(进程接收0位的输入,从1位输出)。
  3. 最低可用文件描述符原则

2-将进程的标准输入重定向到文件

  1. 进程的标准输入默认是连接终端的
  2. 关闭0原本的管道;
  3. 打开文件,文件描述符自动赋为0
  4. dup函数和dup2函数

3-将命令的输出重定向到文件

  1. fork()出子进程之后,在子进程中关闭原始的文件描述符1,然后打开新文件,再用execlp调用新命令
  2. 注意调用新命令后,进程中的代码被替换,但文件描述符数组没有被替换

三 管道

  1. 使用fork()来共享管道
  2. newfd1=dup2(pipe1[0],0);
    理解:内核中默认存在三个管道(连接终端的输入,输出和错误流);每次创建一个进程都会将该进程中的文件描述符数组中的前三位与该三个管道(称为内核管道)连接(即搭建管道(称为连接管道));上述代码先删除了文件描述符0连接输入型内核管道的连接管道,再将文件描述符0与文件描述符pipe1[0]连接的内核管道连接;最后需要调用close(pipe1[0]),删除该文件描述符与内核管道的连接管道。
  3. 读管道不注意就会发生读取阻塞现象:防止读匿名管道的无限阻塞问题的方法
    按理说用read读取文件时,如果文件内容少于size,会返回实际读取的字节数,但是管道读取时就是一直阻塞
    但按我的理解及实验,可推测:“读进程”在调用read对标准输入端进行读取时,若读取size不够,则会堵塞,这时需要关闭 读进程中 向标准输入端输入 的管道
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值