关于进程通信的实例-管道
来源:互联网 发布:linux rm删除文件 编辑:程序博客网 时间:2024/06/05 15:40
管道是一种古老的进程间通信机制,分有名管道和无名管道两种数据通信方式。
有名管道是一个可以在文件系统中长期存在的、具有路径名的文件。用系统调用mknod( )建立。它克服无名管道使用上的局限性,可让更多的进程也能利用管道进行通信。因而其它进程可以知道它的存在,并能利用路径名来访问该文件。对有名管道的访问方式与访问其他文件一样,需先用open( )打开。
无名管道是一个临时文件,利用pipe()函数建立起来的无名文件。只有该系统调用所返回的文件描述符来标识该文件。发送进程利用文件系统调用write()来送入管道,结婚搜进程则使用系统调用read()从管道读出消息。这里,管道俺FIFO方式传送消息,且只能单向传送消息。
三个子进程和父进程的管道通信。
编写一个程序,建立一个管道。同时,父进程生成子进程P1,P2,P3,这三个子进程分别向管道中写入消息(消息由键盘输入),父进程将消息读出。
<code> include<unistd.h> #include<signal.h> #include<stdio.h> main() { int fd[2],p1,p2,p3; char outpipe[100],inpipe[100]; pipe(fd); //创建管道 while((p1=fork())==-1); //创建子进程 if(p1==0) { lockf(fd[1],1,0); //锁定管道写入端 sprintf(outpipe,"child1 is send message!"); //定义发送缓冲区 write(fd[1],outpipe,50); //写入管道 sleep(1); lockf(fd[1],0,0); //释放管道 exit(0); //子进程终止 } else { while((p2=fork())==-1); if(p2==0) { lockf(fd[1],1,0); //互斥 sprintf(outpipe,"child2 is send message!"); write(fd[1],outpipe,50); sleep(1); lockf(fd[1],0,0); exit(0); } else { while((p3=fork())==-1); if(p3==0) { lockf(fd[1],1,0); sprintf(outpipe,"child3 is send message!"); write(fd[1],outpipe,50); sleep(1); lockf(fd[1],0,0); exit(0); } else { wait(0); //同步 等待子进程终止 read(fd[0],inpipe,50); printf("%s/n",inpipe); wait(0); //同步 等待子进程终止 read(fd[0],inpipe,50); printf("%s/n",inpipe); wait(0); //同步 等待子进程终止 read(fd[0],inpipe,50); printf("%s/n",inpipe); exit(0); } } } } 运行结果:
- 关于进程通信的实例-管道
- 无名管道的亲缘关系进程的通信实例
- 进程通信的实例--管道(pipe)
- C#中使用命名管道进行进程通信的实例
- linux进程间通信-----管道总结实例
- Linux进程的管道通信
- 进程间的通信:管道
- 进程间的通信:管道
- 进程之间的通信--管道
- linux的进程通信-管道
- Linux进程间的通信--管道通信
- Linux进程间通信::读写特性和匿名管道的应用(协同进程实例)
- 进程通信 管道通信
- 进程通信---管道通信
- linux进程的信号通信与进程的管道通信
- 以命名管道方式实现网络进程间通信的一个实例
- 以命名管道方式实现网络进程间通信的一个实例
- unix学习笔记---------自己写的管道实例----父子进程通信
- WCF RIA Services Domain Serive的生命周期和数据交互
- 关于 无线接口层(Radio Interface Layer: RIL)
- 基于Windows CE的KITL技术
- Wince5.0下如何将Public和Private下的代码移植到BSP下
- cvFindContours 找错区域问题
- 关于进程通信的实例-管道
- C#判断某软件是否安装
- ◆ 增加博客来自搜索引擎流量的方法分析
- Qt 经典出错信息之”Basic XLib functionality test failed!”(Z..z..)
- Web服务器和应用服务器的区别
- ASE12.x以及15.x中的保留关键字
- 2010.4.24 创建一份简单的XML文件
- EXCEL 隔行颜色
- 硬盘安装centos 组建win和centos双系统