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

时间: 2024-10-31 01:28:46

linux系统知识 - 文本流&管道的相关文章

Linux 系统中文本处理“三剑客”之grep

我们写脚本的时候,经常要截取命令输出的某项数据,比如:我要知道主机上有多少块硬盘 这是很方便的.使用grep搜索出我们想要的数据再使用 sed .或 cup 切割就可以取得我们主机的设备名称了,这是我们取数据的一种方法. Egreq 是grep 的升级版,支持扩展表达式.fgrep不支持正则表达式. 使用格式: 1 2 3 4 5 grep [OPTIONS] PATTERN [FILE...]      -o     只打印输出匹配到字符串      -i      做匹配时候忽略大小写   

嵌入式Linux系统学习嵌入式Linux系统知识大纲梳理

想要学习嵌入式知识.嵌入linux,就需要学习嵌入式linux系统基础架构知识,按照计划学习,现在就让小编带大家熟悉嵌入式Linux系统基础概念.事物总有个核心,复杂的事物总可以模块化.层次化, 嵌入式Linux也如此.学习嵌入式Linux困难,主要因为涉及知识和概念过多,所以学习嵌入式Linux的就需要找到核心,需要模块化,需要进行层次划分. 嵌入式Linux系统做模块化处理就是可划分为Bootloader(引导程序),Kernel(内核),fs(文件系统),Shell(命令行界面),Gui(

linux系统知识 - 进程&amp;线程

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 参考链接 http://www.cnblogs.com/vamei/archive/2012/09/20/2694466.html http://www.cnblogs.com/vamei/archive/2012/10/09/2715393.html 背景知识 指令:计算机能做的事情其实非常简单,比如计算两个数之和.寻找到内存中的某个地址.这些最基础的计算机动作称为指令. 程序

Linux系统编程——进程间通信:管道(pipe)

管道的概述 管道也叫无名管道,它是是 UNIX 系统 IPC(进程间通信) 的最古老形式,所有的 UNIX 系统都支持这种通信机制. 无名管道有如下特点: 1.半双工,数据在同一时刻只能在一个方向上流动. 2.数据只能从管道的一端写入,从另一端读出. 3.写入管道中的数据遵循先入先出的规则. 4.管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等. 5.管道不是普通的文件,不属于某个文件系统,其只存在于内存中. 6.管道在内存中对应一个缓冲区.

Linux系统知识汇总

1 系统相关 1.1 静态IP地址配置 Ubuntu配置和修改IP地址 1.2 Linux内核升级和降级 内核升级 Linux升级内核的正确姿势 内核降级 Ubuntu 16.04 内核降级 1.3 清理缓存cache ubuntu 手动释放缓存 (清理内存cache) 2 JupyterLab 2.1 远程服务器访问 Ubuntu服务器JupyterNotebook配置与远程连接 2.2 多kernel设置 Jupyter lab 安装及多kernel配置 2.3 JuputerLab扩展 J

linux系统知识 - 信号基础

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 参考链接 http://www.cnblogs.com/vamei/archive/2012/10/04/2711818.html 作用 向进程传递信息的方式. 使用情景 内核扮演着进程管理员的角色 内核需要通知进程信息 A进程要告诉B进程一定的信息 产生方式 内核产生,告诉某进程(如除0错误) 某一进程产生,要告诉其他进程(如手机上的清理后台应用) 执行过程 每个进程的附加信息

Linux系统vim文本编辑器练习题

1.复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符 2.复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号 3.复制/etc/rc.d/init.d/functions文件至/tmp目录:替换/tmp/functions文件中的/etc/sysconfig/init为/var/log: 4.删除/tmp/functions

linux基础知识的总结

例如以下内容是我对linux基础知识的总结,由于本人在初期学习linux的时候走了不少的弯路,对于基础的掌握耗费了不少的时间,所以为了后来者对linux的基础部分有个清晰的了解,特对基础知识进行了总结,由于水平有限.难免有疏忽或者不准确的地方.希望大家可以直接指出来,我会及时改正.一切为了知识的传播.^_^ ? *********************************************************************************************

linux系统应用层基础面试题目(很完整,暂时没看)

一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来标识. 4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块. 5. 链接分为: 硬链接 和 符号链接 . 6. 超级块包含了i节点表 和 空闲块表 等重要的文件系统信息. 7. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限,则该八进制数为: 64