码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 2023.10.03


    完成父子进程的通信,
    父进程发送一句话后,子进程接收打印
    然后子进程发送一句话,父进程接收后打印

    1. #include
    2. int main(int argc, char const *argv[])
    3. {
    4. //创建第一个管道
    5. if(mkfifo("./fifo_1",0664)<0){
    6. if(errno!=17){
    7. perror("mkfifo");
    8. return -1;
    9. }
    10. }
    11. //创建第二个管道
    12. if(mkfifo("./fifo_2",0664)<0){
    13. if(errno!=17){
    14. perror("mkfifo");
    15. return -1;
    16. }
    17. }
    18. pid_t cpid=fork();
    19. if(cpid>0){
    20. //打开
    21. char buf[128]="";
    22. while(1){
    23. //打开第一个管道(写)
    24. int fp1=open("./fifo_1",O_WRONLY);
    25. if(fp1<0){
    26. perror("open");
    27. return -1;
    28. }
    29. bzero(buf,sizeof(buf));
    30. printf("父输入数据为>>>");
    31. fgets(buf,sizeof(buf),stdin);
    32. buf[strlen(buf)-1]='\0';
    33. if(strcmp(buf,"quit")==0){
    34. puts("退出输入");
    35. break;
    36. }
    37. write(fp1,buf,sizeof(buf));
    38. puts("发送成功");
    39. //关闭第一个管道
    40. close(fp1);
    41. //打开第二个管道(读)
    42. int fp2=open("./fifo_2",O_RDONLY);
    43. if(fp2<0){
    44. perror("open");
    45. return -1;
    46. }
    47. bzero(buf,sizeof(buf));
    48. off_t res=read(fp2,buf,sizeof(buf));
    49. printf("父读取数据为>>>>%s\n",buf);
    50. if(0==res){
    51. puts("数据读取完成");
    52. break;
    53. }
    54. //关闭第二个管道
    55. close(fp2);
    56. }
    57. }
    58. if(0==cpid){
    59. //打开
    60. char buf[128]="";
    61. while(1){
    62. //打开第一个管道(读)
    63. int fp1=open("./fifo_1",O_RDONLY);
    64. if(fp1<0){
    65. perror("open");
    66. return -1;
    67. }
    68. bzero(buf,sizeof(buf));
    69. off_t res=read(fp1,buf,sizeof(buf));
    70. printf("子读取数据为>>>>%s\n",buf);
    71. if(0==res){
    72. puts("数据读取完成");
    73. break;
    74. }
    75. //关闭第一个管道
    76. close(fp1);
    77. //打开第二个管道(写)
    78. int fp2=open("./fifo_2",O_WRONLY);
    79. if(fp2<0){
    80. perror("open");
    81. return -1;
    82. }
    83. bzero(buf,sizeof(buf));
    84. printf("子输入数据为>>>");
    85. fgets(buf,sizeof(buf),stdin);
    86. buf[strlen(buf)-1]='\0';
    87. if(strcmp(buf,"quit")==0){
    88. puts("退出输入");
    89. break;
    90. }
    91. write(fp2,buf,sizeof(buf));
    92. puts("发送成功");
    93. //关闭第二个管道
    94. close(fp2);
    95. }
    96. }
    97. return 0;
    98. }

  • 相关阅读:
    时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测
    KBPC5010W-ASEMI金属壳针脚方桥KBPC5010W
    电流继电器HDL-A/1-110VDC-1
    zabbix监控
    学习笔记1--自动驾驶定位技术概述
    我认为除了HelloWorld之外,Python的三大数据转换实例可以作为开始学习Python的入门语言。
    springboot本地启动多个模块报错:Address already in use: JVM_Bind
    Spring boot再来一遍
    十二、Docker的简介
    Jackson ImmunoResearch 直接和间接蛋白质印迹方案
  • 原文地址:https://blog.csdn.net/m0_61834469/article/details/133515532
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号