Linux中进程的通信方式有信号,管道,共享内存,消息队列socket等。其中管道是*nix系统进程间通信的最古老形式,所有*nix都提供这种通信方式。管道是一种半双工的通信机制,也就是说,它只能一端用来读,另外一端用来写;另外,管道只能用来在具有公共祖先的两个进程之间通信。管道通信遵循先进先出的原理,并且数据只能被读取一次,当此段数据被读取后,马上会从数据中消失,这一点很重要。

Linux上,创建管道使用pipe函数,当它执行后,会产生两个文件描述符,分别为读端和写端。单个进程中的管道几乎没有任何作用,通常会先调用pipe,然后调用fork,从而创建从父进程到子进程的IPC通道。

Linux中,我们经常会使用到管道,例如用cat命令查看一个大文件时,一页不能全部显示,我们可以通过cat xxx | more来分页显示,又比如搜索文件里的内容可以用 cat xxx | grep search来进行,这里我们都用到了管道。接下来我会用python编写一段自动分页显示的程序,而不用手动来使用管道。

?

把这段代码存为scat.py,增加执行权限之后,运行 scat.py 文件名,系统就会自动读取文件的内容并分页,与使用 cat 文件名 | more 的效果是一模一样的。在上面的代码中,用到了前几篇博客中说的fork,dup2和exec系列函数。

首先是程序创建了一个管道,系统fork之后,父进程关闭其读端,子进程关闭其写端,接下来父进程读取传递过来的文件名,并把内容通过管道的写入端口写入管道里,然后关闭写入端口,并等待子进程的结束。子进程在关闭写入端口后,把读取端口重定向到进程的标准输入,子进程就能自动接收到管道传递过来的数据,最后用execl函数调用系统的more程序用来处理传递过来的数据,这样,就轻松实现的分页的效果。

pipe是半双工的通信机制,如果进程间要使用全双工的通信,可以创建两条管道来达到全双工的效果。另外,pipe匿名管道只能用来在拥有同一个父进程的进程间通信,*nix提供另外一个fifo(命名管道)可以让任意的进程之间实现通信,会在接下来的博客中来讲。

python调用pipe_Python中使用PIPE操作Linux管道相关推荐

  1. python调用百度OCR识别证件+操作excel表格

    python调用百度OCR识别证件+操作excel表格 如果要操作文件的话最好让程序知道文件存不存在,因为做了GUI界面,报错不会直接弹出来,异常捕获就用得比较频繁 因为面向对象没学好,GUI是用工具 ...

  2. python调用mysql中的自定义function并且返回结果

    首先在Mysql中创立一个叫ForeignKeyTest的function,链接如下: https://blog.csdn.net/appleyuchi/article/details/7945291 ...

  3. python调用c语言内核计算,在Linux上实现Python调用C语言函数

    一般思路 Python中内置ctypes库,需调用c编译成的.so文件来实现函数调用. 假设我们所需调用的c文件名为test.c,文件里有我们需要的函数func(x,y). 将.c文件编译成 .so文 ...

  4. bool python 运算_python中的布尔操作

    点击以下链接可以快速访问全部我发表的Python相关文章: Nick WU:Nick WU的python文章目录(持续更新中...)​zhuanlan.zhihu.com 1. Python中的布尔值 ...

  5. 在linux中的vi中的删除操作,linux中vi和vim操作

    一.简单介绍 vi 和 vim 类似于windows的文本编辑器 所有的Linux系统都会内置vi文本编辑器 vim可以看做是vi增强版,具有程序编辑能力,支持语法高亮,代码补全,编译及错误跳转等功能 ...

  6. 有趣的库:pipe(类似linux | 管道)库

    pipe并不是Python内置的库,如果你安装了easy_install,直接可以安装它,否则你需要自己下载它:http://pypi.python.org/pypi/pipe 之所以要介绍这个库,是 ...

  7. python调用pipe_Python multiprocessing模块中的Pipe管道使用实例

    multiprocessing.Pipe([duplex]) 返回2个连接对象(conn1, conn2),代表管道的两端,默认是双向通信.如果duplex=False,conn1只能用来接收消息,c ...

  8. python subprocess pipe_python类库31[进程subprocess与管道pipe]

    修改自: 原文 : Working with Python subprocess - Shells, Processes, Streams, Pipes, Redirects and More 一 程 ...

  9. python调用github_Pycharm中使用GitHub

    本文假设你对pycharm和github都有一定的了解,并且希望在pycharm下直接使用github的版本控制功能. 废话不多说,下面图文详解,全是干货.windows和linux一样配置的,有些路 ...

最新文章

  1. 如何测服务器网站带宽,windows服务器如何测试带宽速度?
  2. Confluence 6 系统运行信息中的 JVM 内存使用情况
  3. 2017先知创新大会:有ZHI而来
  4. FireDac 的数据库批量语句提交(高效)
  5. .net数据库操作类2
  6. 三个数从小到大排序—南阳acm
  7. 全球与中国激光投影设备市场前景规划与发展战略建议报告2022-2028年版
  8. 疾控中心计算机管理员权限,疾控中心健康证分权限管理系统使用说明
  9. Python对数列进行全排列
  10. ROracle Mysql_ROracle包查询数据库中文乱码
  11. win10禁用驱动程序强制签名_图文细说 win10系统未检测到第三个监视器的途径 -win10使用教程...
  12. eclipse jrebel插件
  13. eclipse项目导入到AndroidStudioc报错
  14. umbrello 用户手册_别克君威车主必备:君威用户手册|君威使用说明书电子版|君威保养手册_搜狐汽车...
  15. 【AD】安装AD18教程
  16. C++游戏编程-走迷宫详解
  17. pmp复习资料链接-2021.06.20考试(中培)
  18. qq聊天纪录被删除应该如何恢复
  19. Delphi: RTTI与ini配置文件
  20. KPI、KPA、OKR三者的区别

热门文章

  1. Python查找两个word中的相同内容
  2. xilinx sdk串口打印helloworld如何打开SDK terminal查看
  3. 闰年流程图——18网三杨捷
  4. MySQL: 查看一次SQL的执行时间都花在哪些环节上
  5. oracle 锁表查询及解决、表字段查询
  6. 音频特征-梅尔频率倒谱系数(MFCC)详解
  7. [转载] python函数isdisjoint方法_Python中的isdisjoint()函数
  8. [转载] python的next()函数
  9. [转载] Python之NumPy基础:数组与向量化计算
  10. [转载] JAVA中分为基本数据类型及引用数据类型