第十章 I/O重定向和管道

本文深入探讨Linux下的I/O重定向和管道技术,包括标准输入、输出和错误流的概念,重定向到文件的方法,以及如何使用管道进行进程间通信。详细介绍了dup、dup2、pipe和fork等系统调用在实现这些功能中的应用。
摘要由CSDN通过智能技术生成

0.摘要

概念与技巧
-I/O重定向:概念与原因
-标准输入,输出和标准错误的定义
-重定向标准I/O到文件
-使用fork来为其他程序重定向
-管道(Pipe)
-创建管道后调用fork
相关的系统调用与函数
-dup,dup2
-pipe

1.shell编程

首先将介绍编写shell脚本时的I/O重定向和管道起的作用.然后,本章将介绍操作系统中对I/O重定向的支持.最后,写一个程序来改变进程的输入和输出流..

utmp函数列出用户列表

2.标准I/O与重定向的若干概念

shell中的三种流分别位如下三种:
1.标准输入–需要处理的数据流
2.标准输出–结果数据流
3.标准错误输出–错误消息流

2.1 3个标准文件描述符

stdin:0
stdout:1
stderr:2

2.2默认的连接:tty

在unix和linux中,shell默认链接着stdin,stdout,stderr三个文件。很多程序没有输入,只是把正确的输出写到文件描述符位1,并且把错误消息写到文件描述符2中.

2.3重定向I/O的是shell来操作而不是程序

当使用输出重定向标志,命令cmd>filename是由shell将文件描述符1定位到文件.把原有的链接打断.
本章的三个主要的工作:
1.who>userlist 将stdout连接到一个文件
2.sort

3.如何将stdin定向到文件

进程是从文件描述符读取数据的.并且由将标准输入重定向到可以从文件读入数据.

3.1.方法1:close then open

开始的时候,0连接输入,1连接输出,2连接出错.三种标准流是被连接到终端设备上的.通过文件close可以指定标准的输入输出关闭。如果调用close来关闭程序的stdin(0),之后打开open一个指定文件,则它会按照最低可用文件描述符来匹配,得到打开新文件对应到stdin位置

close(0);
fd = open(<file path>,O_RDONLY);
3.2.方法2:open..close..dup..close

执行过程
1.open打开一个文件,fd不为0,
2.close(0)关闭文件描述符为0。
3.dup(fd)来将文件描述符fd做一个复制。把复制得到的文件fd根据最低可用文件描述符原则与0相连。
4.close(fd)关闭最先打开的文件。
其中在这个方法中,close(0)和dup(fd)可以结合在一起作为一个单独的系统调用dup2

fd=open(<file path>)
close(0)
dup(fd)
close(fd)
3.3.方法3:open..dup2..close
#include<stdio.h>
#include<fcntl.h>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值