博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pipe实现管道命令
阅读量:4092 次
发布时间:2019-05-25

本文共 935 字,大约阅读时间需要 3 分钟。

// ps aux|grep bashint main(){
int fd[2]; pipe(fd); pid_t pid = fork(); if(pid == 0) {
close(fd[0]); dup2(fd[1], STDOUT_FILENO); execlp("ps","ps","aux",NULL); } else {
close(fd[1]); dup2(fd[0], STDIN_FILENO); execlp("grep","grep","bash",NULL); } return 0;}

管道的读写行为											    使用管道需要注意以下4种特殊情况(假设都是阻塞I/O操作,没有设置O_NONBLOCK标志):1. 如果所有指向管道写端的文件描述符都关闭了(管道写端引用计数为0),而仍然有进程从管道的读端读数据,那么管道中剩余的数据都被读取后,再次read会返回0,就像读到文件末尾一样。2. 如果有指向管道写端的文件描述符没关闭(管道写端引用计数大于0),而持有管道写端的进程也没有向管道中写数据,这时有进程从管道读端读数据,那么管道中剩余的数据都被读取后,再次read会阻塞,直到管道中有数据可读了才读取数据并返回。3. 如果所有指向管道读端的文件描述符都关闭了(管道读端引用计数为0),这时有进程向管道的写端write,那么该进程会收到信号SIGPIPE,通常会导致进程异常终止。当然也可以对SIGPIPE信号实施捕捉,不终止进程。具体方法信号章节详细介绍。4. 如果有指向管道读端的文件描述符没关闭(管道读端引用计数大于0),而持有管道读端的进程也没有从管道中读数据,这时有进程向管道写端写数据,那么在管道被写满时再次write会阻塞,直到管道中有空位置了才写入数据并返回。

转载地址:http://iecii.baihongyu.com/

你可能感兴趣的文章
django-email中, 本地配置和阿里云配置是不同的。
查看>>
debian中修改freeswitch的 sip默认端口,防盗打
查看>>
在django中, 更新数据库表的时候, 对非空字段,在makemigrations时, 经常要填写缺省值
查看>>
我的组织机构与权限分配
查看>>
跨服务器docker freeswitch录音路径设备方案
查看>>
正则表达式 字符含义
查看>>
sh: 0: getcwd() failed: No such file or directory
查看>>
Django REST framework 之JWT认证
查看>>
双系统 正确卸载Ubuntu系统
查看>>
django date 查询
查看>>
django 如何找到两个查询集(querySet)的并集?
查看>>
git 拒绝合并无关的历史
查看>>
利用django 建立一个完整的纯后端的流程
查看>>
解决爬虫伪装之伪装User-Agent和代理IP
查看>>
genymotion下载 与安装
查看>>
appium 服务器环境搭建
查看>>
双硬盘 双系统 安装win10+ubuntu19.01
查看>>
django restframework ModelViewSet PUT方法不被允许
查看>>
fusionpbx docker 录音无效
查看>>
ubuntu19自动升级到 ubuntu20.04后的问题
查看>>