管道 半双工。一般由父进程创建,用于父子进程间、子进程间通信。匿名,一对一。 简单执行命令行,并读写标准输入输出。 FIFO(命名管道) 用法:服务端创建一个 FIFO,其它任何进程都可以向其写入数据,服务端读到数据后处理。可以一读多写。写数据的大小小于 PIPE_BUF 时为原子操作。 类似文件操 ...
分类:
系统相关 时间:
2017-05-28 18:49:46
阅读次数:
254
1、参考:http://bbs.chinaunix.net/thread-3699479-1-1.html1.1、二楼 说到:“小于或等于 PIPE_BUF 字节的 write 一定是原子操作,超过这个值的不一定。POSIX 规定 PIPE_BUF 至少是 512。”1.2、九楼 说到:“PIPE_...
分类:
其他好文 时间:
2015-11-09 16:56:15
阅读次数:
228
13.6.2 使用FIFO的客户/服务器应用程序
作为学习FIFO的最后一部分内容,现在考虑怎样通过命名管道来编写一个非常简答的客户/服务器应用程序。用一个服务器进程来接受请求,对它们进行处理,最后把结果数据返回给发送请求的一方:客户。
如果想要允许多个客户进行都可以向服务器发送数据,假设被处理的数据可以被拆分为一个个数据块,每个的长度都小于PIPE_BUF字节。
因为服务器每次只能处...
分类:
系统相关 时间:
2015-07-16 09:49:59
阅读次数:
193
现在开发的项目是从solaris到linux的应用移植。经常用到popen函数,使用8192字节的数组读取popen输出,但没有进行溢出判断。
刚开始认为是一个简单的内存越界,但对popen和PIPE调查以后,疑惑越来越多了。
1)问题的引出
popen使用管道来记录被调用命令的输出,那么popen的最大写入字节数必然是管道的最大值。
使用linux的ulimit -a来查看系统限制:...
分类:
系统相关 时间:
2015-03-08 18:51:38
阅读次数:
1285
管道(管道都是单向的半双工数据流)
管道分类:
1.无名管道:只能在具有共同祖先的进程间使用。
2.命令管道:可以在无论是否有亲缘关系的进程间使用,只能在同一主机上使用。
无名管道使用fcntl设置非阻塞模式,
有名管道可以使用open活fcntl设置非阻塞模式。
管道和fifo的限制:
OPEN_MAX :一个进程在任意时刻打开的最大描述符数;
PIPE_BUF :可原子的写往一个管道或fifo的最大数据量。...
分类:
其他好文 时间:
2015-02-28 20:24:37
阅读次数:
237
进程间通信和同步半双工管道 原型:int
pipe(intfiledes[2]); 实质上是创建两个文件描述符,filedes[0]用于读,filedes[1]用于写。 当写入数据的数目小于PIPE_BUF时,写入是原子的,当大于PIPE_BUF时,可能不是原子的。 如果管道是空的,那么read会被阻塞,如果管道是满的,那..
分类:
系统相关 时间:
2015-02-21 21:11:14
阅读次数:
223