【IO】进程间通信

news2024/11/19 11:18:47

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;                                                                              
        }
//读数据i
        bzero(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.coloradmin.cn/o/1491959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL面试题纯享版

基础内容 1、MySQL的架构分层 2、一条 SQL 查询语句的执行流程 3、如何查看 MySQL 服务被多少个客户端连接了&#xff1f; 4、 空闲连接会一直占用着吗&#xff1f; 5、MySQL 的连接数有限制吗&#xff1f; 6、 怎么解决长连接占用内存的问题&#xff1f; 7、执行器与存储引擎…

Java 并发编程 面试题及答案整理,最新面试题

Java中的volatile关键字有什么作用&#xff1f; volatile关键字在Java中的作用包括&#xff1a; 1、保证可见性&#xff1a; 确保变量的修改对其他线程立即可见。 2、防止指令重排&#xff1a; 防止编译器对操作进行重排序&#xff0c;保证代码的执行顺序。 3、非原子性&am…

xss.haozi.me:0x0B

<svg><script>(1)</script>

数仓实战——京东数据指标体系的构建与实践

目录 一、如何理解指标体系 1.1 指标和指标体系的基本含义 1.2 指标和和标签的区别 1.3 指标体系在数据链路中的位置和作用 1.4 流量指标体系 1.5 指标体系如何向上支撑业务应用 1.6 指标体系背后的数据加工逻辑 二、如何搭建和应用指标体系 2.1 指标体系建设方法—OS…

数电票又增新票种 百望云率先推出机动车数电票解决方案

经过两年多的试点推广&#xff0c;数电票工程已经覆盖全国大部分省区市&#xff08;含计划单列市&#xff09;&#xff0c;随着系统建设的深入&#xff0c;不仅是应用功能逐渐完善&#xff0c;对票种的支持也走向全面。 2023年11月天津市正式开启机动车数电票的开具功能&#x…

解决win10串口一直被占用

目录 问题描述解决方法 问题描述 串口设备一直被占用&#xff0c;换串口也没有用&#xff0c;永远都是串口正在被使用&#xff0c;甚至换硬件设备也不行&#xff0c;都快烦死了 解决方法 输入这个&#xff1a; 删除这个玩意&#xff0c;计算机\HKEY_LOCAL_MACHINE\SYSTEM\Cu…

数字逻辑与计算机组成

逻辑代数 按一定逻辑关系进行运算的代数 与普通代数相同的是&#xff1a;都是由变量 (逻辑变量)、常量 (逻辑常量) 和一些运算符组成的代数系统 与普通代数不同的是&#xff1a; &#xff08;1&#xff09;逻辑常量&#xff1a;0 和 1&#xff0c;不表示数值大小&#xff0…

FreeRTOS操作系统学习——FreeRTOS工程创建

FreeROTS工程创建 详细步骤 如无特殊情况&#xff0c;大部人都要配置为外部高速时钟 另外&#xff0c;本实验使用了FreeRTOS&#xff0c;FreeRTOS的时基使用的是Systick&#xff0c;而 STM32CubeMX中默认的HAL库时基也是Systick&#xff0c;为了避免可能的冲突&#xff0c;最…

停止Tomcat服务的方式

运行脚本文件停止 运行Tomcat的bin目录中提供的停止服务的脚本文件 关闭命令 # sh方式 sh shutdown.sh# ./方式 ./shutdown.sh操作步骤 运行结束进程停止 查看Tomcat进程&#xff0c;获得进程id kill进程命令 # 执行命令结束进程 kill -9 65358 操作步骤 注意 kill命令是…

CentOS7 Zookeeper3.8.3 单节点安装

CentOS7 Zookeeper3.8.3 单节点安装 1、把压缩包丢tools里&#xff0c;进tools cd /tools2、解压到training tar -zxvf /tools/apache-zookeeper-3.8.3-bin.tar.gz -C /training3、进training cd /training4、重命名 mv apache-zookeeper-3.8.3-bin zookeeper5、进zookeep…

构建信息蓝图:概念模型与E-R图的技术解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

7.2.2 用坐标表示平移 教案设计及课堂检测设计

【学习目标】 1&#xff0e;掌握坐标变化和图形平移的关系&#xff0c;能用点的平移规律求点平移后的点的坐标&#xff0e; 2&#xff0e;会按要求画出平移后的图形&#xff0c;并写出顶点的坐标&#xff0e;

稀碎从零算法笔记Day5-LeetCode:多数元素

题型&#xff1a;数组、计数、排序、STL函数、查找众数 链接&#xff1a;169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 题目描述 给定一个大小为 n …

二手手机管理系统|基于Springboot的二手手机管理系统设计与实现(源码+数据库+文档)

二手手机管理系统目录 目录 基于Springboot的二手手机管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户管理功能的实现界面 2、用户中心管理功能的实现界面 3、新闻信息管理功能的实现界面 4、商品收藏管理功能的实现界面 5、订单管理功能的实现界…

浅析扩散模型与图像生成【应用篇】(六)——DiffuseIT

6. Diffusion-based Image Translation using Disentangled Style and Content Representation 本文介绍了一种基于扩散模型的图像转换方法&#xff0c;图像转换就是根据文本引导或者图像的引导&#xff0c;将源图像转换到目标域中&#xff0c;如下图所示。   在图像转换中待…

Java 面试题及答案整理,最新面试题

Java中的内存模型是如何设计的&#xff1f; Java的内存模型主要包括堆、栈、方法区和本地方法栈几个关键部分&#xff1a; 1、堆&#xff08;Heap&#xff09;&#xff1a; 这是Java内存管理中最大的一块&#xff0c;被所有线程共享。在堆中主要存放对象实例和数组。 2、栈&…

「经验」在博途中 是否可以在 LAD与STL 语言之间进行切换

用惯了STEP7&#xff0c;准确来说是SIMATIC Manager进行编程开发的同学&#xff0c;在转战TIA portal后&#xff0c;通常会经历一段“晦涩”的过度期&#xff0c;包括指令库的微小变动、工作界面的大改等等。 又比如&#xff1a;“在博途中&#xff0c;怎么快速切换LAD与STL语…

7.1.3 Selenium的用法2

目录 1. 切换 Frame 2. 前进后退 3. 对 Cookies 操作 4. 选项卡管理(了解) 5. 异常处理 6. 反屏蔽 7. 无头模式 1. 切换 Frame 我们知道网页中有一种节点叫作 iframe&#xff0c;也就是子 Frame&#xff0c;相当于页面的子页面&#xff0c;它的结构和外部网页的结构完全…

计算机网络、协议、端口号

1&#xff0c;TCP&#xff1a;面向连接服务的协议 2&#xff0c;IP、UDP&#xff1a;面向无连接的协议 3&#xff0c;OST参考模型&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 低三层&#xff1a;通信子网&#xff1b;中三层&#xff1a;资源子…

Flutter整体框架

Flutter整体框架由三部分组成&#xff1a;Framework、Engine和Embedder。 Framework Framework提供了一个用 Dart 语言编写的现代、反应式框架&#xff0c;由许多抽象的层级组成。它包括一套丰富的布局、动画、绘制、手势UI组件及配套代码&#xff0c;以及更基础的异步、文件、…