Linux-命名管道

文章目录

  • 前言
  • 一、命名管道接口函数介绍
  • 二、使用步骤


前言

上章内容,我们介绍与使用了管道。上章内容所讲的,是通过pipe接口函数让操作系统给我们申请匿名管道进行进程间通信。在这里插入图片描述
并且这种进程间通信一般只适用于父子进程之间,那么对于两个没有“血缘”关系的进程,我们还能通过怎样的方式来进行通信呢?

本章内容主要讲解命名管道的通信,而命名管道,顾名思义,既然匿名管道是没有名字的管道,那么命名管道就是有名字的管道。


一、命名管道接口函数介绍

在这里插入图片描述

先来讲讲函数名:mk - make fifo - first in first out(先进先出),因为管道的buffer就是先进先出的策略,所以函数名为mkfifo。

第一个参数 const char* pathname: 这个参数是作为你要生成的命名管道的路径与名字。不过要注意的是,这个文件的路径最好是你有权限去进行访问,不然可能会出现各种问题。

第二个参数 mode_t mode: 因为既然你要生成一个命名管道文件,那么你就需要给它制定文件的访问权限。

二、使用步骤

使用步骤与匿名管道比较相似,只是多了需要自己调用mkfifo函数的过程

//   # fifo.hpp
#ifndef _FIFO_COM
#define _FIFO_COM#include<iostream>
#include<cstdio>
#include<assert.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<cstdio>
#include<string.h>
#include<string>#define PATH_NAME "./fifo.ipc"
std::string END_STR("end");
#endif
//  Server端
#include "fifo.hpp"
#include "Log.hpp"int main()
{// 1.申请命名管道int ret = mkfifo(PATH_NAME, 0666);if (ret == -1){perror("mkfifo");exit(1);}int a = 0;Log(Debug) << "Server: make named_pipe success!  Step1" << std::endl;// 2.打开命名管道文件// Server端进行写操作int fd = open(PATH_NAME, O_WRONLY);if (fd == -1){perror("open");exit(2);}Log(Debug) << "Server: open named_pipe success!   Step2" << std::endl;// 3.开始写std::string buffer;while (1){std::cout << "Please Enter Message Line ,End enter 'end' :> ";std::getline(std::cin, buffer);if(buffer == END_STR) break;write(fd, buffer.c_str(), buffer.size());}//.关闭命名管道close(fd);Log(Debug) << "Server: close fc done!   Step3" << std::endl;return 0;
}
//  Client端
#include "fifo.hpp"
#include "Log.hpp"
int main()
{// 1.打开命名管道文件// Client端进行读int fd = open(PATH_NAME, O_RDONLY);if (fd == -1){perror("open");exit(2);}char buffer[1024];Log(Debug) << "Client: open named_pipe success!  Step1" << std::endl;// sleep(5);//  开始进行读while (1){memset(buffer, '\0', sizeof(buffer));int n = read(fd, buffer, sizeof(buffer) - 1);if (n == 0){// 读到了文件末尾Log(Debug) << "Read done!" << std::endl;break;}else if (n > 0){std::cout << "Server say: " << buffer << std::endl;}}close(fd);unlink(PATH_NAME);Log(Debug) << "Client: close named_pipe success!  Step2" << std::endl;Log(Debug) << "Client: close fd done!   Step3" << std::endl;return 0;
}

//   Log.hpp 日志
#include <iostream>
#include <time.h>
#include <string>#define Debug 0
#define Error 1const std::string com[] = {"Debug","Error"};std::ostream &Log(int command)
{std::cout << "[" << (unsigned)time(nullptr) << "]:"<< "[" << com[command] << "]" <" ";return std::cout;
}

需要特别注意的是:对于管道文件,必须读写两端都打开管道文件(也就是都进行open管道文件),否则读端或者写端就会被堵塞在open函数。

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

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

相关文章

创建一个郭德纲相声GPTs

前言 在这篇文章中&#xff0c;我将分享如何利用ChatGPT 4.0辅助论文写作的技巧&#xff0c;并根据网上的资料和最新的研究补充更多好用的咒语技巧。 GPT4的官方售价是每月20美元&#xff0c;很多人并不是天天用GPT&#xff0c;只是偶尔用一下。 如果调用官方的GPT4接口&…

打造VR数字乡村文旅新品牌,VR全景技术助力乡村振兴

新年伊始&#xff0c;各地乡村特色产业都在蓬勃发展&#xff0c;让冬日里的乡村重新焕发了新的活力。并且在这个冬季&#xff0c;各地还依托生态资源优势&#xff0c;打造智慧乡村文旅新品牌&#xff0c;激活乡村消费活力&#xff0c;例如有些乡村利用空心村&#xff0c;打造多…

看完这篇带你了解大学生必考安全证书NISP详解

NISP证书详解 NISP证书介绍&#xff1a;NISP证书等级&#xff1a;NISP&#xff08;一级&#xff09;报名&#xff1a;NISP&#xff08;一级&#xff09;课程大纲&#xff1a;NISP&#xff08;二级&#xff09;报名NISP&#xff08;二级&#xff09;课程大纲NISP二级置换CISP指南…

NLP论文阅读记录 - 2021 | WOS 使用深度强化学习及其他技术进行自动文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1. Seq2seq 模型2.2.强化学习和序列生成2.3.自动文本摘要 三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Auto…

IPv6组播--SSM Mapping

概念 SSM(Source-Specific Multicast)称为指定源组播,要求路由器能了解成员主机加入组播组时所指定的组播源。 如果成员主机上运行MLDv2,可以在MLDv2报告报文中直接指定组播源地址。但是某些情况下,成员主机只能运行MLDv1,为了使其也能够使用SSM服务,组播路由器上需要提…

【野火i.MX6ULL开发板】开发板连接网络(WiFi)与 SSH 登录、上电自动登录、设置静态IP、板子默认参数

0、前言 参考之前自己写的&#xff1a; http://t.csdnimg.cn/g60P8 参考资料&#xff1a; [野火]《Linux基础与应用开发实战指南——基于i.MX6ULL开发板》_20230323 从野火官网下载 参考博客&#xff1a; http://t.csdnimg.cn/8uh4O 参考官方文档&#xff1a; https://doc.…

使用pygame实现简单的烟花效果

import pygame import sys import random import math# 初始化 Pygame pygame.init()# 设置窗口大小 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("Fireworks Explosion")# 定义颜色 black (0, 0, 0) wh…

2023.1.13 关于在 Spring 中操作 Redis 服务器

目录 引言 前置工作 前置知识 实例演示 String 类型 List 类型 Set 类型 Hash 类型 ZSet 类型 引言 进行下述操作的前提是 你的云服务器已经配置好了 ssh 端口转发即已经将云服务器的 Redis 端口映射到本地主机 注意&#xff1a; 此处我们配置的端口号为 8888 可点击下…

【数据结构与算法】之数组系列-20240115

这里写目录标题 一、599. 两个列表的最小索引总和二、724. 寻找数组的中心下标三、面试题 16.11. 跳水板四、35. 搜索插入位置 一、599. 两个列表的最小索引总和 简单 假设 Andy 和 Doris 想在晚餐时选择一家餐厅&#xff0c;并且他们都有一个表示最喜爱餐厅的列表&#xff0c…

网络分流规则

现在的网络是越来越复杂。 有必要进行分流。 有一些geosite.dat是已经整理好的&#xff0c;包含许多的网站的分类&#xff1a; 分流规则&#xff1a; route规则 主要是: {"type": "field","outboundTag": "direct","domain&quo…

优雅草蜻蜓API大数据服务中心v1.0.4更新-加入蓝奏云直链解析·每日Bing·字数统计·今日油价·历史上的今天等接口

2024年1月13日优雅草蜻蜓API大数据服务中心v1.0.4更新-加入蓝奏云直链解析每日Bing字数统计今日油价历史上的今天等接口 优雅草api服务-大数据中心自12月29日推出以来截止2024年1月13日累计被调用次数为413次&#xff0c;共收录23个接口&#xff0c;截止前一日2024年1月12日当…

RSIC-V“一芯”学习笔记(一)——概述

考研的文章和资料之后想写的时候再写怕趴 文章目录 一、阶段设计二、环境、开发语言和工具三、最重要的两个观念四、处理器芯片设计五、处理器芯片设计包含很多软件问题六、处理器芯片的评价指标七、复杂系统的构建和维护八、专业世界观九&#xff0c;提问的艺术(提问模板)十、…

视频做成二维码查看?多格式视频二维码生成器的使用方法

现在音视频是工作和生活中经常需要使用的一种内容表现形式&#xff0c;很多人都通过这种方式来查看视频内容&#xff0c;比如产品介绍、使用说明、安装教程等。通过一个二维码就可以来承载视频内容&#xff0c;与传统的方式相比拥有更快的内容传播速度&#xff0c;简化用户获取…

江山易改本性难移之ZYNQ SDK QSPI固化bug及其解决方法

之前在Vivado2018.3通过QSPI方式固化程序时出现问题&#xff0c;显示flash擦除成功&#xff0c;但最后总是不能写入到flash中。 查资料发现从VIVADO 2017.3版本开始&#xff0c;Xilinx官方为了使Zynq-7000和Zynq UltraScale 实现流程相同&#xff0c;在QSPI FLASH使用上做了变化…

七、Qt 信号和槽

在QT4以上的版本&#xff0c;在窗体上用可以通过选中控件&#xff0c;然后点击鼠标右键单击按钮&#xff0c;选择“转到槽”。可以自动创建信号和槽。 选择clicked(),并点击 ok Qt Creator会给头文件和代码文件自动添加 这个按钮的单击事件&#xff08;信号和槽&#xff09;。 …

3.4 在开发中使用设计模式

现在&#xff0c;我们应该对设计模式的本质以及它们的组织方式有了初步的认识&#xff0c;并且能够理解ROPES过程在整体设计中的作用。通过之前章节对“体系结构”及其五个视图的探讨&#xff0c;我们打下了坚实的基础。初步了解了UML的基本构建模块后&#xff0c;我们现在可以…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-1 表单

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>表单</title> </head><body> <!--<form action"URL地址" method"提交方式" name"表单名称" /*编码“多部…

Linux 基于 rsync 实现集群分发脚本 xsync

一、rsync 简介 rsync&#xff08;remote synchronize&#xff09;是 Liunx/Unix 下的一个远程数据同步工具。它可以通过 LAN/WAN 快速同步多台主机间的文件和目录&#xff0c;并适当利用 rsync 算法&#xff08;差分编码&#xff09;以减少数据的传输。 rsync 算法并不是每一次…

Maven《一》-- 一文带你快速了解Maven

目录 &#x1f436;1.1 为什么使用Maven 1. Mavan是一个依赖管理工具 ①jar包的规模 ②jar包的来源问题 ③jar包的导入问题 ④jar包之间的依赖 2. Mavan是一个构建工具 ①你没有注意过的构建 ②脱离IDE环境仍需构建 3. 结论 &#x1f436;1.2 什么是Maven &#x…

笔试案例2

目录 一、笔试案例 二&#xff0c;思维导图 一、笔试案例 09&#xff09;查询学过「张三」老师授课的同学的信息 selects.*,c.cname,t.tname,sc.score from t_mysql_teacher t, t_mysql_course c, t_mysql_student s, t_mysql_score sc where t.tidc.cid and c.cidsc.cid and …