linux系统知识 - 文本流&管道

Posted yc紫日

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统知识 - 文本流&管道相关的知识,希望对你有一定的参考价值。

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

参考链接

       http://www.cnblogs.com/vamei/archive/2012/09/14/2683756.html

  http://www.cnblogs.com/vamei/archive/2012/10/10/2715398.html

文本流原理

       万物皆文本 -> 万物皆文本流

       当unix执行一个程序的时候,会自动打开三个流,stdin、stdout、stderr。

       默认情况下,stdin连接到键盘,stdout和stderr连接到屏幕。

       虽然都打开,但不都一定使用。

文本流例子

       键盘敲击("ls\\n")的stdin,流入到命令行(命令行也是个程序),

       命令行调用/bin/ls得到输出流("a.txt"),

       输出流流向屏幕。

重定向

       将自定义内容导向stdout -> echo

       重定向stdout -> 使用\'>\'或\'>>\'

       重定向stdin -> 使用\'<\'

       重定向stderr -> 使用\'2>\'或\'2>>\'

       重定向stdout和stderr -> 使用\'>&\'

重定向举例

       cat < a.txt > b.txt # 把a.txt的内容复制到了b.txt

管道

       将一个命令的输出导向另一个命令的输入

       利用管道将多个进程连接在一起,从而让各个进程协作,实现复杂的功能。

管道理解

       管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个小纸条。

       管道的一端连接一个进程的输入,另一端连接另一个进程的输入。

       管道不需要很大,他被设计成环形的数据的数据结构,以便可以循环利用。

       管道中没有信息的话,从管道中读取的进程会等待。

       管道中放满信息的时候,尝试放入信息的进程会等待。

       两个进程都终结的时候,管道自动消失

管道原理

       管道利用fork机制建立,从而让两个进程可以连接到同一个PIPE上。

       开始的时候,管道的输入与输入都连接到同一个进程process1上,

       当fork复制进程时,会将这两个连接都复制到新的进程process2上,

       随后,两个进程各自关闭掉自己不需要的一个连接,就构成了连接两个进程的PIPE

FIFO

       http://blog.csdn.net/lianghe_work/article/details/47722175

       由于管道基于fork机制建立,所以管道只能应用于父子进程之间,或者拥有相同祖先的两个子进程之间。为了解决这个问题,linux提供FIFO方式建立连接。

       FIFO又叫做命名管道

       FIFO是一种特殊的文件类型,他在文件系统中有对应的路径,但是它是由内核管理的。

       当一个进程以读的方式打开该文件,另一个进程以写的方式打开该文件,那么内核就会在这两个进程之间建立管道,

       FIFO是一个在文件系统中的文件,但是他的内容放在内存中。

       使用FIFO的进程退出后,FIFO文件依旧存在在文件系统中

       FIFO有名字,不相关的进程可以通过打开命名管道进行通信

以上是关于linux系统知识 - 文本流&管道的主要内容,如果未能解决你的问题,请参考以下文章

linux系统知识 - 进程&线程

AI知识搜索利器:基于ElasticSearch构建专知实时高性能搜索系统

(转)超全整理!Linux性能分析工具汇总合集

(转)超全整理!Linux性能分析工具汇总合集

知识结构体系

⌈Linux_感受系统美学⌋ 一步一步迈向系统底层 - 寻觅Linux奥秘,探寻Linux下权限管理&周边属性