【IO】进程间通信

A程序代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, const char *argv[])
{if(mkfifo("./fifo1",0664)<0){if(errno !=17){perror("mkfifo");return -1;}}if(mkfifo("./fifo2",0664)<0){if(errno !=17){perror("mkfifo");return -1;}}printf("mkfifo success\n");int fd1 = open("./fifo1",O_WRONLY);if(fd1<0){perror("open");return -1;}int fd2=open("./fifo2",O_RDONLY);if(fd2<0){perror("open_fifo2");return-1;}printf("open RDONLY NONBLOCK success\n");char buf[128];ssize_t res;while(1){printf("输入数据>>\n");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]='\0';if(write(fd1,buf,sizeof(buf))<0){perror("write");return -1;}printf("写入成功\n");if(strcmp(buf,"quit")==0){break;                                                                              }
//读数据ibzero(buf,sizeof(buf));res=read(fd2,buf,sizeof(buf));if(res<0){perror("read");return -1;}else if(res==0){printf("写端关闭,且管道没有数据");break;}printf("fd2:%ld  %s\n",res,buf);}close(fd2);close(fd1);return 0;
}

B程序代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, const char *argv[])
{if(mkfifo("./fifo1",0664)<0){if(errno !=17){perror("mkfifo");return -1;}}if(mkfifo("./fifo2",0664)<0){if(errno !=17){perror("mkfifo");return -1;}}printf("mkfifo success\n");pid_t pid;int fd1 = open("./fifo1",O_RDONLY);if(fd1<0){perror("open");return -1;}int fd2 = open("./fifo2",O_WRONLY);if(fd2<0){perror("open");return -1;}printf("open RDONLY NONBLOCK success\n");char buf[128];ssize_t res;while(1){bzero(buf,sizeof(buf));res=read(fd1,buf,sizeof(buf));if(res<0){perror("read");return -1;}else if(0==res){                                                                       printf("写端关闭,且管道里没有数据\n");break;}printf("%ld :%s \n",res,buf);//写数据bzero(buf,sizeof(buf));printf("输入数据>>\n");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]='\0';if(write(fd2,buf,sizeof(buf))<0){perror("write");return -1;}printf("fd2_写入成功\n");if(strcmp(buf,"quit")==0){break;}}close(fd2);close(fd1);return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/512688.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql 查询

连续区域取数 select sid,min(b.eid) as eid from (select id2 as sid from txtTempTable where tc1 like Name*) as a, (select id as eid from txtTempTable where tc1Page) as b where sid<b.eid group by sid 16,18, 22,23 id tc1tc21617182223 两表对应关…

Tomcat部署及多实例(一)

一、Tomcat简介 1、简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。 当在一台机器上配置好Apache 服务器&#xff0c…

Java 面试题

Java 基础 以下代码执行结果&#xff1f; 示例1&#xff1a; public static void main(String[] args) {int a 0;Integer b 0;String c "0";String d new String("0");change(a, b, c, d);System.out.println(a "|" b "|" …

https代理相对socks5代理有什么优势?

随着互联网的快速发展&#xff0c;代理服务已成为许多人在访问敏感或地理位置受限的网站时所依赖的工具。其中&#xff0c;HTTPS代理和SOCKS5代理是两种最常用的代理服务类型。本文将探讨HTTPS代理相对SOCKS5代理的优势。 1、安全性 HTTPS代理使用SSL/TLS协议对客户端和代理服…

ArmSoM Rockchip系列产品 通用教程 之 UART 使用

1. UART 简介​ Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串口标准&#xff0c;完整模块支持以下功能&#xff1a; 支持5、6、7、8 bits数据位。支持1、1.5、2 bits停止位。支持奇校验和偶校验&#xff0c;不支持mark校验和space校验。支持接…

LabVIEW眼结膜微血管采集管理系统

LabVIEW眼结膜微血管采集管理系统 开发一套基于LabVIEW的全自动眼结膜微血管采集管理系统&#xff0c;以提高眼结膜微血管临床研究的效率。系统集成了自动化图像采集、图像质量优化和规范化数据管理等功能&#xff0c;有效缩短了图像采集时间&#xff0c;提高了图像质量&#…

金三银四:从技巧到趋势的全面准备

程序员的金三银四求职宝典 随着春天的脚步渐近&#xff0c;对于许多程序员来说&#xff0c;一年中最繁忙、最重要的面试季节也随之而来。金三银四&#xff0c;即三月和四月&#xff0c;被广大程序员视为求职的黄金时期。在这两个月里&#xff0c;各大公司纷纷开放招聘&#xf…

Gitlab 安装部署

目录 1、Jenkins 结合 Gitlab 构建 CI/CD 环境 CI/CD 介绍 CI/CD 流程 Jenkins 简介 GitLab 简介 项目部署方式 CI系统的工作流程 2、搭建 GitLab 安装 GitLab 配置 GitLab 修改root密码 访问 GitLab 开机自启 3、使用 GitLab 管理 GitLab 关闭 GitLab 注册功能…

Linux 文件系列:深入理解文件描述符fd,重定向,自定义shell当中重定向的模拟实现

Linux 文件系列:深入理解文件fd,重定向,自定义shell当中重定向的模拟实现 一.预备知识二.回顾C语言中常见的文件接口跟重定向建立联系1.fopen函数的介绍2.fclose函数的介绍3.代码演示1.以"w"(写)的方式打开2.跟输出重定向的联系3.以 "a"(追加)的方式打开4.…

【JVM】JVM相关机制

1. JVM内存区域划分 1.1 内存区域划分简介 内存区域划分&#xff1a;实际上JVM也是一个进程&#xff0c;进程运行时需要向操作系统申请一些系统资源&#xff08;内存就是典型的资源&#xff09;&#xff0c;这些内存空间就支撑着后续Java程序的运行&#xff0c;而这些内存又会…

WiFi|硬体:茶凳浅谈-高通802.11be WLAN AP Chipsets 参考设计与boardData之间的映射

前言: WiFi|硬体:茶凳浅谈-高通Wi-Fi 7立项前的选型 博文中提到一些选型的组合&#xff0c;比如: 主芯片的搭配IPQ9554 QCN9274 (2x2 2.4G, 2x2 5G) QCN9272 (2x2 6G) 主芯片的搭配IPQ9574 QCN9274 (2x2 2.4G, 2x2 5GL) QCN9274 (2x2 5GH, 2x2 6G) 红色标示出差异的部分…

map和set基本使用

map和set基本使用 二叉搜索树setmultisetmapmultimap 二叉搜索树 在学习map和和set的使用之前&#xff0c;我们需要对二叉搜索树有一定的了解。 二叉搜索树也称二叉排序树或者二叉查找树&#xff0c;如果该树不是空树&#xff0c;就应该满足以下条件&#xff1a;非空左子树的所…