更多资料请点击:我的目录
本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢。

本篇记录应用无名管道PIPE,进行父子双进程的“双向通信”,并当某一方收到/发送“quit”马上结束通信,具体代码如下:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <sys/wait.h>int main()
{int status;char buf[50];                       //read/write用于存放字符串int fd1[2];                          //用于存放管道1的两个文件描述符int fd2[2];                            //用于存放管道2的两个文件描述符if(pipe(fd1) == -1)                  //创建管道1,并将文件描述符放进fd1[2]中{perror("pipe()");exit(1);}if(pipe(fd2) == -1)                   //创建管道2,并将文件描述符放进fd2[2]中{perror("pipe()");exit(1);}pid_t id = fork();             //创建一个子进程if(id > 0)                          //父进程{while(1){bzero(buf,50);read(fd1[0],buf,50);       //父进程从管道1读取信息if(strcmp(buf,"quit") == 0){write(fd2[1],buf,50);  //父进程从管道2写入信息break;}printf("父进程:我收到:%s\n\n",buf);bzero(buf,50);printf("回复子进程:");scanf("%s",buf);write(fd2[1],buf,50);        //父进程从管道2写入信息}}else if(id == 0)                   //子进程{while(1){bzero(buf,50);printf("发给父进程:");scanf("%s",buf);write(fd1[1],buf,50);      //子进程从管道1写入信息bzero(buf,50);read(fd2[0],buf,50);     //子进程从管道2读取信息if(strcmp(buf,"quit") == 0){write(fd1[1],buf,50);  //子进程从管道1写入信息break;}printf("子进程:我收到:%s\n\n",buf);}exit(0);                      //退出子进程}pid_t otherid=waitpid(id,&status,0);//阻塞等待close(fd1[0]);close(fd1[1]);close(fd2[0]);close(fd2[1]);
}

运行结果:

无名管道PIPE,进行父子双进程的“双向通信”相关推荐

  1. 有名管道FIFO,进行双进程的“双向通信”

    更多资料请点击:我的目录 本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢. 本篇记录应用有名管道FIFO,进行双进程的"双向通信" ...

  2. 通过单管道(pipe)实现两个进程间双向通信

    用例: #include <stdio.h> #include <unistd.h>#define BUF_SIZE 30int main(int argc, char con ...

  3. pipe 半双工_linux进程间通讯之管道(无名管道pipe)实现全双工双向通讯

    管道是什么: 1. 管道只能用于具备亲缘关系的进程之间通讯. 2.管道是一种单工或者说半双工的通讯方式,传递信息的方向是固定的,只能由一端传递到另外一端. 头文件及函数原型: #include int ...

  4. linux进程间通信:无名管道 pipe

    文章目录 内核层实现 结构 通信原理 特点 使用 函数声明 使用实例 单向通信 双向通信 编程注意事项 管道中无数据时读操作会阻塞 将管道的写端句柄关闭,不会影响读端数据读取 管道中没有数据,写操作关 ...

  5. Linux内核中无名管道pipe和有名管道fifo的分析

    1.管道(pipe) 管道是进程间通信的主要手段之一.一个管道实际上就是个只存在于内存中的文件,对这个文件的操作要通过两个已经打开文件进行,它们分别代表管道的两端.管道是一种特殊的文件,它不属于某一种 ...

  6. linux系统调用创建无名管道,linux 无名管道pipe和有名管道FIFO

    1.管道(pipe) 管道是进程间通信的主要手段之一.一个管道实际上就是个只存在于内存中的文件,对这个文件的操作要通过两个已经打开文件进行,它们分别代表管道的两端.管道是一种特殊的文件,它不属于某一种 ...

  7. 无名管道pipe使用方法

    有名管道pipe函数:int pipe(int filedes[2]);  下面程序通过创建进程,父进程写入数据,子进程读取数据,从管道中读取数据. #include <stdio.h> ...

  8. 无名管道(PIPE)与 有名管道(FIFO)

    更多资料请点击:我的目录 本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢. 无名管道(PIPE)部分: (1)无名管道的创建: 头文件: #incl ...

  9. 无名管道-----实现父子进程相互通信

    创建一条无名管道并且给你两个文件描述符(读写的文件描述符) pipefd[0]:读端 pipefd[1]:写端 思路: 只需要一个.c即可,fork一次即可(因为用的是无名管道) 注意: 父进程: 发 ...

最新文章

  1. 在读研、竞赛和实习中追求平衡
  2. Day 14 保护环境的建议
  3. MongoDB应用篇(转)
  4. SpringMVC的请求-文件上传-单文件上传的代码实现1
  5. Unsupported Hardware Detected
  6. Spring 事务初始化源码分析
  7. 对于一组给定的叶子结点_高糊图片可以做什么?Goodfellow等人用它生成一组合理图像...
  8. MySQL(6)--- 创建数据库
  9. mysql doc插入数据_如何向MySQL数据库的表中录入数据.doc
  10. 关于循环经济的三维展示
  11. Atitit 数据库的历史与未来 目录 1.1. 两个对于数据库强需求的行业。电信 金融 1 1.2. 艾提拉分析 对数据库强需求行业金融 1 2. 数据库历史 2 2.1. ,上个世纪50,6
  12. Python爬虫实战之抓取猫眼电影
  13. elasticsearch search timeout机制
  14. C语言教程(四):基础知识(最后一续)
  15. C#编程,Lazy(延迟初始化)用法
  16. 【数学模拟卷总结】2023李林六套卷数学二第三套
  17. python的scipy简介
  18. 南信与南邮谁的计算机专业更强,南信力压南邮!关于一流本科专业!
  19. php高德地图手机定位,AMap3DMap_Demo
  20. LOAM、LEGO-LOAM与LIO-SAM的知识总结

热门文章

  1. 无线打印便捷不止是说说 联想小新打印机初体验
  2. android 蓝牙广播协议,Android蓝牙协议-蓝牙配对与连接
  3. siri控制继电器_如何使用Siri从iPhone控制Apple TV
  4. 打开网页状态栏不见了
  5. 再也不怕短信丢失了---短信备份
  6. 手机批发业务-商品备选区
  7. jquery 遍历类对象方法
  8. 力引导图python实现 force directed layout
  9. 幼儿园1计算机第一节课教案,3.7日 第一节幼儿园课
  10. Redis缓存面试题重点汇总