探索linux管道的容量
2016-07-02 14:35
579 查看
管道特点:
(1)、单向通信。数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道。
(2)、管道只能用于有血缘关系的进程间通信。
(3)、流式服务。发送和接收大小不受特定格式的限制。
(4)、管道的生命周期和进程有关。
(5)、同步与互斥原则。
fcntl()可以改变已打开的文件性质
F_GETFL 取得文件描述符状态旗标,此旗标为open()的参数flags。
F_SETFL 设置文件描述符状态旗标,参数arg为新旗标,但只允许O_APPEND、O_NONBLOCK和O_ASYNC位的改变,其他位的改变将不受影响。
所以管道的容量是64kb。
(1)、单向通信。数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道。
(2)、管道只能用于有血缘关系的进程间通信。
(3)、流式服务。发送和接收大小不受特定格式的限制。
(4)、管道的生命周期和进程有关。
(5)、同步与互斥原则。
fcntl()可以改变已打开的文件性质
F_GETFL 取得文件描述符状态旗标,此旗标为open()的参数flags。
F_SETFL 设置文件描述符状态旗标,参数arg为新旗标,但只允许O_APPEND、O_NONBLOCK和O_ASYNC位的改变,其他位的改变将不受影响。
#include<stdio.h> #include<sys/types.h> #include<unistd.h> #include<fcntl.h> #include<errno.h> #include<stdlib.h> #include<string.h> int main() { int _pipe[2]; if(pipe(_pipe)==-1) { printf("pipe error\n"); return 1; } int ret; int count=0; int flag=fcntl(_pipe[1],F_GETFL); fcntl(_pipe[1],F_SETFL,flag|O_NONBLOCK); while(1) { ret=write(_pipe[1],"A",1); if(ret==-1) { printf("error %s\n",strerror(errno)); break; } count++; } printf("count=%d\n",count); return 0; }
所以管道的容量是64kb。
相关文章推荐
- IPC-管道通信
- Linux--进程间通信之匿名管道及命名管道
- Linux管道容量
- linux下管道的容量以及实现机制
- Linux入门:管道的运行机制
- Linux内核---7.Makefile学习笔记
- Linux内核---6.make menuconfig 流程分析
- Linux内核---5.Makefile显示打印信息
- Linux内核---4.产生内核head.s反汇编文件
- Linux内核---3.linux 内核zImage生成过程
- Linux内核---2.TQ2440系统移植出现的问题总结
- Linux内核---1.TQ2440使用总结
- Linux netstat命令
- Linux(Ubuntu)下MySQL的安装与配置
- Linux 下五个顶级的开源命令行 Shell
- 交叉编译环境
- linux 学习 设置固定网Ip
- 31.每日一个Linux命令----wc
- windows下安装linux/ubantu
- linux 备份工具