2023-11-29 Linux环境创建命名管道小实验


点击 <C 语言编程核心突破> 快速C语言入门


Linux环境创建命名管道小实验

  • 前言
  • 一、`mkfifo()`函数AI助手提供协作
  • 二、代码
  • 总结


前言

要解决问题: Linux环境用mkfifo()创建个管道, 但是被阻塞, 发现是管道虽然建立了, 但是没有进程打开它, 以至于阻塞.

想到的思路: 开始时是用fork()使用子进程创建管道, 但依然阻塞, 后发现是没有进程打开管道, 用fopen()打开它即可.

其它的补充: 问题地址: Linux操作系统中的,管道通信问题


一、mkfifo()函数AI助手提供协作

mkfifo是Linux中用于创建命名管道的命令。

下面是一个创建命名管道并使用它进行进程间通信的示例:

$ mkfifo myfifo

在一个终端窗口中运行以下命令以从管道读取数据:

$ cat myfifo
  1. 在另一个终端窗口中运行以下命令以向管道写入数据:
$ echo "Hello World" > myfifo
  1. 在第一个终端窗口中,你应该会看到输出“Hello World”

这是一个简单的示例,说明如何使用mkfifo命令创建命名管道,并使用cat和echo命令对其进行读写。使用命名管道可以方便地在不同的进程中共享数据。

我们需要做的就是将上面的命令行程序编程成为C语言代码.

二、代码

我在原始问题代码上加了一个fork(), 分了一个子进程, 用于创建管道, 如果管道存在, 子进程退出, 不影响主进程, 如果没有则创建.

在主进程耽搁一秒钟, 用于子进程创建命名管道, 时间是足够的.

调用popen(), 通过cat myfifo命令从另一个进程打开管道, 解除阻塞.

当完成管道的输入, pclose()关闭管道进程.

#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>int main()
{printf("%d进程:创建管道...\n", getpid());int err = fork();if (err == 0){if (mkfifo("myfifo", 0666) == -1){perror("mkfifo");return -1;}return 0;}if (err != 0 && err != -1){sleep(1);printf("%d进程:打开管道...\n", getpid());FILE *tt = popen("cat myfifo", "r");int fd = open("myfifo", O_WRONLY);if (fd == -1){perror("open");return -1;}printf("%d进程:发送数据...\n", getpid());char buf[1024];for (;;){printf("> ");fgets(buf, sizeof(buf) / sizeof(buf[0]), stdin);if (!strcmp(buf, "!\n")){break;}if (write(fd, buf, strlen(buf) * sizeof(buf[0])) == -1){perror("write");return -1;}}printf("%d进程:关闭管道...\n", getpid());if (close(fd) == -1){perror("close");return -1;}printf("%d进程:删除管道...\n", getpid());if (unlink("myfifo") == -1){perror("unlink");return -1;}printf("%d进程:完成任务!\n", getpid());pclose(tt);}if (err == -1){return -1;}return 0;
}

总结

Linuxmkfifo()创建命名管道, 实际在文件管理器下看, 是创建一个文件, 然后可以不同进程进行调用, 传递信息, 很有意思.


点击 <C 语言编程核心突破> 快速C语言入门


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

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

相关文章

悲观锁乐观锁在django中使用

1 悲观锁乐观锁 1.1 并发控制 1.1 悲观锁 1.2 乐观锁 1.3 悲观锁乐观锁使用场景 2 django中开启事务 2.1 全局开启事务 2.2 视图开启事务 2.3 局部使用事务 2.4 savepoint回滚 2.5 事务提交后回调函数 3 django中使用悲观锁 3.1 前置条件&#xff0c;表模型 3.1 模拟秒杀生成…

配电网重构单时段+多时段(附带matlab代码)

配电网重构单时段多时段 对于《主动配电网最优潮流研究及其应用实例》的基本复现 简介&#xff1a;最优潮流研究在配电网规划运行中不可或缺&#xff0c;且在大量分布式能源接入的主动配电网环境下尤为重要。传统的启发式算法在全局最优解和求解速度上均无法满足主动配电网运行…

八股文-如何理解Java中的多态

什么是多态&#xff1f; 多态是面向对象编程的一个重要概念&#xff0c;它允许一个对象以不同的形式表现。也就是说&#xff0c;在父类中定义的属性和方法&#xff0c;在子类继承后&#xff0c;可以有不同的数据类型或表现出不同的行为。这可以使得同一个属性或方法&#xff0…

读书笔记:彼得·德鲁克《认识管理》第34章 结构与战略

一、章节内容概述 在现代管理的短暂历史上&#xff0c;我们曾经两次相信找到了正确答案。一 次是第一次世界大战时期亨利法约尔构建的“职能制组织”&#xff0c;另一次是 一代人时间后阿尔弗雷德斯隆构建的“联邦分权制组织”。在适当的领 域和条件下&#xff0c;这两种组织结…

操作系统 day14(进程同步、进程互斥)

进程同步 概念 进程的异步性体现在&#xff0c;例如&#xff1a;当有I/O操作时&#xff0c;进程需要等待I/O操作&#xff0c;而每个I/O操作又是不同的&#xff0c;所以进程没有一个固定的顺序&#xff0c;固定的时间来执行&#xff0c;而这体现了进程的异步性。 进程互斥 …

freeRTOS异常处理函数分析(以RISC-V架构进行分析)

1、异常处理函数的注册 对RISC-V架构中断不熟悉&#xff0c;可参考博客&#xff1a;《RISC-V架构——中断处理和中断控制器介绍》&#xff1b; 2、异常处理函数分析 2.1、数调用关系 freertos_risc_v_trap_handler //异常处理函数入口portcontextSAVE_CONTEXT_INTERNAL //保存…

Python-pip配置国内镜像源,快速下载包

文章目录 国内镜像源临时使用永久配置添加环境变量Path测试关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 国内…

零代码连接钉钉宜搭与用友U8,让业财数据管理简单高效

零代码连接钉钉宜搭与用友U8&#xff0c;让业财数据管理简单高效 如果把企业内部的业务系统比作一条条河流&#xff0c;那么它们的交汇点就像江河湖海。在这些交汇点上&#xff0c;数据的汇集、分析和共享离不开系统之间的集成。 钉钉宜搭和用友U8是两个在企业中非常重要的系统…

实现电商平台与营销系统无缝集成:雅座的无代码开发与API连接

无代码开发&#xff1a;营销的新引擎 在数字化转型的浪潮中&#xff0c;无代码开发已成为企业提升效率、减少成本的新引擎。这种开发方式允许非技术人员通过图形界面构建应用程序&#xff0c;无需编写代码即可实现复杂功能。这对于营销、广告推广以及用户运营等业务尤为重要&a…

wvp 视频监控平台抓包分析

抓包时机 下面的抓包时机是抓包文件最新&#xff0c;但是最有用的包 选择网卡开始抓包 如果之前已经选择网卡&#xff0c;直接开始抓包 停止抓包 重新抓包 sip播放过程分析 过滤条件 tcp.port 5060 and sip 可以看到有这些包 选择任何一个 &#xff0c;戍边右键--追踪流--…

JDK21下载+安装+环境配置教程(Windows系统)

前言&#xff1a;甲骨文公司与2023.9发布JDK21,JDK21将是一个长期支持&#xff08;LTS&#xff09;版本&#xff0c;JDK20目前可以从官网下载使用。 1&#xff0c;搜索Oracle官网找到JDK21 Java Downloads | Oracle 2&#xff0c;切换Windows系统&#xff0c;然后点击下载&am…

记录vue2组件传值props的两种写法

在写传值时候发现了props的对象和数组类型写法&#xff0c;不知道有什么差距就查了一下 props: ["testMsg",] 这种方式是使用数组的形式来定义props&#xff0c;其中数组的元素是要传递的属性名称。在子组件中&#xff0c;可以通过this.$props来访问这些属性 <…

Mysql 不执行索引问题与优化

难以查找的隐藏问题 及 解决办法&#xff1a; 问题总结&#xff1a;

项目demo —— GPT 聊天机器人

本文介绍我的开源项目 TelegramChatBot&#xff0c;这是一个基于 OpenAI GPT API 开发的 telegram 机器人&#xff0c;具有多模态交互能力&#xff0c;求 star&#xff01;感谢大家&#xff01;在 telegram jokerController_bot 立即体验&#xff01;欢迎对 GPT 应用开发或对 t…

Day09

1.异常 1.1 介绍 在使用计算机语言进行项目开发的过程中&#xff0c;即使程序员把代码写得尽善尽美&#xff0c;在系统的运行过程中仍然会遇到一些问题&#xff0c;因为很多问题不是靠代码能够避免的&#xff0c;比如&#xff1a;客户输入数据的格式问题&#xff0c;读取文件…

【分布式系统学习】CAP原理详解

CAP原理详解 前言CAP一张图 一、概念1.1 关键词解读1.2 关于CAP&#xff08;拆分解读&#xff09;1.3 CAP原理精髓 二、CAP模拟场景举例理解三、CAP原理证明为什么不能同时满足&#xff08;下面举例说明&#xff09;3.1 必须满足分区容错性P下的处理方式3.2 不是必须满足分区容…

​LeetCode解法汇总2336. 无限集中的最小数字

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 现有一个包…

PlantUML语法(全)及使用教程-类图

目录 1. 类图1.1、什么是类图1.2、元素声明1.3、类之间的关系1.4、关系上的标签1.5、在元素名称和关系标签中使用非字母1.6、添加方法 1. 类图 类图的设计语法与编程语言的传统语法相似。这种相似性为开发人员提供了一个熟悉的环境&#xff0c;从而使创建图表的过程更简单、更直…

Golang中rune和Byte,字符和字符串有什么不一样

Rune和Byte&#xff0c;字符和字符串有什么不一样 String Go语言中&#xff0c; string 就是只读的采用 utf8 编码的字节切片(slice) 因此用 len 函数获取到的长度并不是字符个数&#xff0c;而是字节个数。 for循环遍历输出的也是各个字节。 Rune rune 是 int32 …

[数据结构]-map和set

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、键值对…