IO Redirect 与 Pipe
2018-08-06 09:00:49来源:博客园 阅读 ()
对于任何一个进程,在启动时,都会打开三个流:stdin(标准输入), stdout(标准输出), stderr(标准错误输出)。Stdout,stderr是process与Display之间,stdin是process与keyboard之间。也就是说系统的标准输入输出,是进程与设备间交流的桥梁。
但是在很多情况下,我们的程序数据并不来自于标准输入,我们在使用标准输出时,也不希望写到显示器上,可能是文件,网络,打印机等。这时候就需要IO Redirect来作用了。还有,为了方便使用等,我们希望将写到Stdout的数据作为另外一个进程的输入,其实这也是IO redirect的一种,不过它有个特殊的名字——pipe。
- 1、IORedirect
- 1.1 File Handle(File Description)
- 1.2 基本的重定向操作符 > <
- 1.2.1 右边是文件
- 1.2.2 右边是FD
- 1.3 操作符变体 >>
- 2、Pipe
1、IO Redirect
1.1 File handle (File Description)
操作系统内核会为每一个进程分配很多file handler(也叫 File Description),其中初始时会分配3个handle,用数字0,1,2来表示,分别分配给了stdin, stdout, stderr。其他的则是随着需要分配的。
这样一来,就可以直接使用0,1,2来表示Stdio了。
在linux上使用lsof -p pid查看一个进程打开了哪些文件。下面是一个查看运行中的top命令的情况:
1.2 基本的重定向操作符:>与<
< 将标准输入(stdin, 0)重定向,也就是说数据来源不是键盘,而是其他,例如文件等。
> 将标准输出(stdout, 1)重定向,也就是说数据不再写到显示器,而是其他地方。
其中在 >,< 操作符的左边,只能是FD,右边可能是file,也可以是FD等。此外, <等价于 <1, >等价于1>,所以2> 就是将标准错误输出(stderr, 2)重定向。
IO redirect的本质是什么呢?在我看来本质是FD的赋值。怎么理解呢?
默认情况下一个,一个进程(例如:ls)是这样的:
对于一个进程而言: #0 = keyboard #1 = display #2 = display
1.2.1 操作符右边是文件
ls >a:代表了 fd1=a #0 = keyboard #1 = a #2 = display
Ls 3>a :代表了fd3=a
sort<file.txt :代表了fd0=file.txt
1.2.2 操作符右边是FD
如果希望在多个FD之间进行赋值运算,那么就用>&或者<&。
那么理解上还是 >时赋值运算符,&则是dup2系统调用了。
2>&1的意思就是 对 FD1执行dup2,得到FD1的拷贝,然后赋值给FD2,也就是说FD1指向了谁,FD2也去指向谁。
例如:
3>file.txt 2>&3 代表了:FD3-->file.txt,那么FD2--->file.txt
需要注意的是:>本身不要求文件必须是存在的,但是经过了上述复制并赋值操作和后,启动进程之初就要准备好相应的流,此时就需要文件file.txt必须是存在的。
1.3 变体操作符 >>
如果将stdout或者stderr 重定向到一个文件,但文件里已经有内容,会是什么结果呢?使用 > file时,文件中已有的内容会被truncate掉,也就是文件内容被清除了。
如果想要保留文件内容怎么办呢?
有一个变体操作符:>> 以append的方式重定向。
2、Pipe
如果希望将输出内容,直接作为另外一个程序的输入,这种技术成为Pipe,能够进行Pipe的进程,必须是父子进程。用“|” 来表示管道。Pipe也是进程间通信的一种技术。
例如:lsof -p pid | grep xxx ,父进程是 lsof, 子进程是grep。
本篇内容适用于 Windows,Linux,Unix等操作系统。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:CentOS7.5修改字符集
- 权限rwx 2020-04-23
- 对于搭建网站中出现“You don't have permission to 2020-01-06
- SSH的 Write failed: Broken pipe 问题 2019-11-25
- Linux中的文件和目录结构详解 2019-05-08
- 程序猿必知必会Linux命令之awk 2019-04-25
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash