1.5 简单的无名管道使用
来源:互联网 发布:c语言引擎 编辑:程序博客网 时间:2024/06/05 04:03
(无名管道的使用。)
进程间通信方式之无名管道
1:什么是管道以及无名管道:
管道是一种使用非常常用的通信机制。实际上管道和共享内存相似,是一种代表内存块的设备文件。但管道限制这块内存的的大小且规定读写方向。每个管道大小在linux系统中只有4k。同时管道只能单向传输,一个进程只能设定成读或写其中一种,而且必须要在运行时有一读一写两个进程。
使用单个固定缓冲区也会带来问题,比如在写管道时可能变满,当这种情况发生时,随后对管道的write()调用将默认地被阻塞,等待某些数据被读取,以便腾出足够的空间供write()调用写。如果需要双向传输数据需要建立量个管道才能完成。
无名管道是没有名字的管道。这种管道使用简单,一般用在父子进程。
2:进程间无名管道通信
程序简述:
管道是linux中最常见的种通信方式,由于单向传输且内存占用只有4096b可以更大的节省内存。节主要介绍无名管道,无名管道由于没有名字所以只能在父子兄弟进程中进行数据传输,需要注意的是一个管道只能在一个进程内进行读,另一个进行写,不可以进行双向传输,也不能只建立读(或写),不然管道会破列无法传输。
重点掌握函数:
Pipe();
write();
read();
close();
代码翻译:(本来代码备注是有缩进的,可一家进来就变成html的了~~~~~)
<span style="font-size:12px;">#include<stdio.h>#include<unistd.h>int main(){int n,fd[2]; // 这里的fd是文件描述符的数组,用于创建管道做准备的*必 // 须建立,fd[]就是管道的嵌套字了pid_t pid; //创建进程的IDchar line[100];//数据存储变量if(pipe(fd)<0) // 创建管道 printf("pipe create error\n"); if((pid=fork())<0) //利用fork()创建新进程 printf("fork error\n"); else if(pid>0){ //这里是父进程,先关闭管道的读出端,然后在管道的写端写 // 入“hello world" close(fd[0]); //标准的关闭,先关闭管道的读出端,然后在管道的读 // 出端写入数据 write(fd[1],"hello word\n",11);//write时如果无数据会等待数据输入, // 若要实现查询模式需要使用select函数,select函数的具体 // 用法请参阅书名数管道一节和百度。}else{ close(fd[1]); //这里是子进程,先关闭管道的写入端,然后在管道的读出端 // 读出数据 n= read(fd[0],line,100);//将管道中元素写入line,最长100个。为读到 // 的实际字符数// printf("%s",line); write(STDOUT_FILENO,line,n);//这条的意思是printf("%s",line);(注释 //掉那行与本语句意思相同)。原意为将line中前n个元素输出到 //STDOUT_FILENO,这个宏是标准打印,在stdio.h中}//exit(0);//程序在建立了两个进程之后退出,由于不同版本的gcc中exit库 //所在位置不同,所以暂时被注释掉。}</span>
0 0
- 1.5 简单的无名管道使用
- 无名管道的使用
- 无名管道pipe的使用
- 无名管道pipe的使用
- 无名管道pipe的使用
- 一个简单的无名管道示例
- 无名管道的用法
- 无名管道的通信
- 无名管道pipe的读写
- 无名管道的C++封装
- 无名管道的C++封装
- Linux下的无名管道
- 无名管道的父子通信
- 有名管道和无名管道的区别
- 有名管道和无名管道的区别
- 有名管道和无名管道的区别
- 利用有名管道&无名管道 实现 简单的多人聊天
- 利用无名管道实现简单并行计算
- Go_默认路由源码分析
- XP用户账户有关操作
- nginx共享内存管理
- 使用ffmpeg视频编码过程中踩的一个坑
- 【实用】ctags的用法
- 1.5 简单的无名管道使用
- JavaScript脚本语言简介
- poj3225 Help with Intervals 线段树,成段更新,TLE,求指教。。本人提供测试数据~
- 循环-04. 验证“哥德巴赫猜想”(20)
- maven setting.xml 的全部配置,包含说明
- Crixalis's Equipment
- MyEclipse的配置与使用
- JavaScript之详述闭包导致的内存泄露
- Java自带容器类的equals和hashCode方法