Linux环境编程之IPC进程间通信(四):管道和FIFO比较
来源:互联网 发布:万网域名解析修改端口 编辑:程序博客网 时间:2024/05/18 06:49
系统加于管道和FIFO的唯一限制是:
1、OPEN_MAX 一个进程在任意时刻打开的最大描述符数。可以通过调用sysconf函数查询。
2、PIPE_BUF 可原子地写往一个管道或FIFO的最大数据量。Posix任务它是一个路径名变量,它的值可以随指定的路径名而变化,因为不同的路径名可以落在不同文件系统上,而这些文件系统可能有不同的特征。所以PIPE_BUF可通过pathconf函数取得。
pipeconf.c
#include <stdio.h>#include <stdlib.h>#include <unistd.h>intmain(int argc, char **argv){if(argc != 2)printf("usage:pipeconf <pathname>");printf("PIPE_BUF = %ld, OPEN_MAX = %ld\n",pathconf(argv[1], _PC_PIPE_BUF), sysconf(_SC_OPEN_MAX));exit(0);}编译:gcc pipeconf.c -o pipeconf
运行:./pipeconf
结果显示:PIPE_BUF = 4096, OPEN_MAX = 1024
对管道或FIFO能以两种方式设置成非阻塞:
1、调用open时可指定O_NONBLOCK标志。
writefd = open(FIFO1, O_WRONLY | O_NONBLOCK, 0);
2、如果一个描述符已经打开,可调用fcntl启用O_NONBLOCK标志。对于管道来说,必须使用这种技术,因为管道没哟open调用,在pipe调用中也无法指定O_NONBLOCK标志。使用fcntl时,先使用F_GETFL命令取得当前文件状态标志,将它与O_NONBLOCK标志按位或,再使用F_SETFL命令存储这些文件状态标志。
int flags;if((flags = fcntl(fd, F_GETFL, 0) < 0))err_sys("F_GETEFL error");flags |= O_NONBLOCK;if((flags = fcntl(fd, F_SETFL, 0) < 0))err_sys("F_SETEFL error");
0 0
- Linux环境编程之IPC进程间通信(四):管道和FIFO比较
- Linux环境编程之IPC进程间通信(三):FIFO
- Linux环境编程之IPC进程间通信(二):管道
- Linux环境进程间通信(一)管道和FIFO
- Linux环境进程间通信(一)管道和FIFO
- Linux进程通信之管道和FIFO
- Linux进程通信之管道和FIFO
- 进程间通信IPC之--无名管道(pipe)和有名管道(fifo)
- APUE读书笔记---进程间通信(IPC)之管道和有名管道(FIFO)
- linux 进程间通信之管道和FIFO
- Linux进程间通信(IPC)编程实践(二) FIFO命名管道
- 进程间通信之管道和FIFO
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- Linux进程间通信(IPC)之二——命名管道(FIFO)
- Linux IPC之管道和FIFO
- Linux进程间通信(一)之无名管道(PIPE)和有名管道(FIFO)
- Java中多线程总结
- 安卓应用运营知识:VersionCode和VersionName
- 静态链表
- Java中输入输出流方法总结
- 投影纹理映射(Projective Texture Mapping)
- Linux环境编程之IPC进程间通信(四):管道和FIFO比较
- Java中集合类用法总结
- 你真的懂GCD吗?
- BZOJ 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
- Java中final关键字用法总结
- Solr Suggest实现搜索智能提示
- 过滤器处理跨域问题
- Java中static关键字用法总结
- HLG 1813 小乐乐要下山 (dp)