UNIX环境高级编程学习之第十五章进程间通信 - 通过半双工匿名管道实现父子进程通信
2010-08-18 11:39
981 查看
UNIX环境高级编程学习之第十五章进程间通信 - 父子进程通过半双工匿名管道通信
注意:当最后一个访问管道进程终止时,管道就被完全地删除了。
/* User:Lixiujie * Date:20100818 * Desc:父子进程通过半双工匿名管道通信 */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> int main(void){ pid_t pid; int pfd[2]; int cfd[2]; char szBuf[256]; if (pipe(pfd) < 0){ perror("pipe(pfd) failed!"); exit(1); } if (pipe(cfd) < 0){ perror("pipe(cfd) failed!"); exit(1); } if ((pid = fork()) < 0){ perror("fork() failed!"); exit(1); }else if (pid > 0){ // parent close(cfd[0]); // colse child read close(pfd[1]); // colse parent write while (1){ memset(szBuf, 0x00, sizeof(szBuf)); strcpy(szBuf, "P: Hello world!"); write(cfd[1], szBuf, strlen(szBuf)+1); memset(szBuf, 0x00, sizeof(szBuf)); read(pfd[0], szBuf, sizeof(szBuf) - 1); printf("%s/n", szBuf); sleep(1); } }else{ // child close(cfd[1]); close(pfd[0]); while (1){ memset(szBuf, 0x00, sizeof(szBuf)); read(cfd[0], szBuf, sizeof(szBuf) - 1); printf("%s/n", szBuf); memset(szBuf, 0x00, sizeof(szBuf)); strcpy(szBuf, "C: Hello world!"); write(pfd[1], szBuf, strlen(szBuf)+1); sleep(1); } } return 0; }
注意:当最后一个访问管道进程终止时,管道就被完全地删除了。
相关文章推荐
- UNIX环境高级编程学习之第十五章进程间通信 - 通过匿名管道实现父子进程同步
- UNIX环境高级编程学习之第十五章进程间通信 - 两个进程通过映射普通文件实现共享内存通信
- UNIX环境高级编程学习之第十五章进程间通信 - 通过有名管道(命名管道)实现进程间通信
- UNIX环境高级编程学习之第十五章进程间通信 - 通过消息队列实现进程间通信
- UNIX环境高级编程学习之第十章信号-用信号实现父子进程同步
- UNIX环境高级编程学习之第八章进程控制-用父子进程实现打开kate,返回kate关闭状态
- UNIX环境高级编程学习之第十五章进程间通信 - 信号量的使用(信号灯的使用, 计算信号灯)
- UNIX环境高级编程 第十五章:进程间通信:是指在不同进程之间传播或交换信息
- UNIX环境高级编程学习之第十五章进程间通信 - 系统V 共享内存使用(使用信号灯保护共享内存)
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信EPoll模型(多路复用), 实用Socket通信模板
- UNIX环境高级编程学习之第五章标准IO-实现查看所有用户
- UNIX环境高级编程学习之第十三章守护进程 - 单实例的守护进程
- Unix环境高级编程学习笔记之进程环境(1)
- UNIX环境高级编程学习之第十三章守护进程 - 初始化一个守护进程
- 孙鑫VC学习笔记:第十七讲 用匿名管道实现进程间的通信
- UNIX环境高级编程学习之第十章信号-信号集的操作,让进程阻塞SIGQUIT信号
- UNIX环境高级编程学习笔记:9_12 孤儿进程 孤儿进程组
- UNIX环境高级编程学习之第六章系统数据文件和信息-修改第四章实现的Shell的“ls -l”功能
- UNIX环境高级编程——进程管理和通信(总结)
- 匿名管道实现父子进程之间的通信....