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 ")的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有名字,不相关的进程可以通过打开命名管道进行通信

原文地址:https://www.cnblogs.com/yc913344706/p/8093896.html