博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
管道和FIFO
阅读量:5285 次
发布时间:2019-06-14

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

1、概述

管道:是最初的Unix IPC形式,但是没有名字只能有亲缘关系的进程使用。FIFO有时称为有名管道,可以在任意进程间使用。

2、管道​

#include

int pipe(int fd[2]);

​返回值:成功,返回0,否则返回-1。参数数组包含pipe使用的两个文件的描述符。fd[0]:读管道,fd[1]:写管道。

宏​S_ISFIFO用于确定一个文件描述符fd是管道还是FIFO

3、popen和pclose

popen函数创建一个管道并启动另外一个进程,该进程要么从管道中读出​,要么往管道中写入。

​4、FIFO

FIFO称为有名管道,是一个单向数据流,不能打开一个FIFO之后即往里读又往里写。

#include

#include

定义函数

int mkfifo(const char * pathname,mode_t mode);

​若成功则返回0,否则返回-1,错误原因存于errno中。

5、管道和FIFO属性

对于一个描述符有两种方式设置其为非阻塞

(1)调用open时指定O_NONBLOCK标志

(2)如果一个描述符已经打开,那么可以调用fcntl以启用O_NONBLOCK标志。

对于管道只能使用​fcntl方法设置,因为管道没有open函数,设置时应当先获取在或上O_NONBLOCK标志然后设置。

O_NONBLOCK标志对管道和FIFO的影响

​6、管道和FIFO的限制

(1)OPEN_MAX,一个进程在任意时刻打开的最大描述符数。

(2)PIPE_BUF,可原子的往一个管道或者FIFO里写的最大数量

可以使用pipeconf /名称查询该值,可使用uimit -ns 512设置​OPEN_MAX

转载于:https://www.cnblogs.com/luiz/p/6828816.html

你可能感兴趣的文章
数字分组小算法
查看>>
(C/C++) 基础问答题
查看>>
VIJOS1240 朴素的网络游戏[DP]
查看>>
springboot集成redis(mybatis、分布式session)
查看>>
compareTo()
查看>>
Enterprise Library 自定义应用程序块实战(下)
查看>>
NYOJ-42 一笔画问题
查看>>
C# out Keyword
查看>>
【转】VC中MessageBox与AfxMessageBox用法与区别
查看>>
Template
查看>>
jQuery局部动态刷新
查看>>
C#abstract 抽象类
查看>>
ubuntu 下执行定时任务
查看>>
composer.lock文件的作用
查看>>
Android -- startActivityForResult-------&&&----setResult
查看>>
Android SDK 2.3/3.0/4.0/4.1 下载与安装教程
查看>>
gitlab-ce安装01
查看>>
【转】有关“干部身份”
查看>>
bzoj3211花神游历各国 线段树
查看>>
Django——如何在Django模板中注入全局变量?——part1
查看>>