【Linux】进程间通信_3

文章目录

  • 七、进程间通信
    • 1. 进程间通信分类
      • 命名管道
  • 未完待续


七、进程间通信

1. 进程间通信分类

命名管道

管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。命名管道是一种特殊类型的文件。
在这里插入图片描述
在这里插入图片描述

我们只需要使用 mkfifo 命令就可以在当前路径下创建命名管道。
在这里插入图片描述
Makefile

.PHONY:all
all:pipe_server pipe_clientpipe_server:PipeServer.ccg++ -o $@ $^ -std=c++11
pipe_client:PipeClient.ccg++ -o $@ $^ -std=c++11
.PHONY:clean
clean:rm -f pipe_server pipe_client

Comm.hpp

#ifndef __COMM_HPP__
#define __COMM_HPP__#include <iostream>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <cerrno>
#include <cstring>
#include <unistd.h>
#include <fcntl.h>
using namespace std;#define Mode 0666
#define Path "fifo"// 命名管道类
class Fifo
{
public:Fifo(const string& path): _path(path){umask(0);// 创建命名管道int n = mkfifo(_path.c_str(), Mode);if (n == 0){cout << "mkfifo success" << endl;}else{cout << "mkfifo failed, error : " << errno << "errstring : " << strerror(errno) << endl;}}~Fifo(){// 删除命名管道int n = unlink(_path.c_str());if (n == 0){cout << "remove " << _path << " success" << endl;}else{cout << "remove failed, error : " << errno << "errstring : " << strerror(errno) << endl;}}
private:// 文件路径 + 文件名string _path;
};#endif

pipe_server(服务端接收消息):

#include "Comm.hpp"
#include <unistd.h>int main()
{// 创建命名管道Fifo fifo(Path);// 打开命名管道文件int rfd = open(Path, O_RDONLY);if (rfd < 0){cerr << "open failed, errno: " << errno << " , errnostring: " << strerror(errno) << endl;return 1;}char buffer[1024];// 循环读取管道数据while (true){ssize_t n = read(rfd, buffer, sizeof(buffer) - 1);if (n > 0){buffer[n] = 0;cout << "client says: " << buffer << endl;}else if (n == 0){cout << "client quie, me too" << endl;break;}else{cerr << "read failed, errno: " << errno << " , errnostring: " << strerror(errno) << endl;break;}}// 关闭命名管道文件close(rfd);return 0;
}

pipe_client(客户端输入消息):

#include "Comm.hpp"int main()
{// 以写的方式打开命名管道文件int rfd = open(Path, O_WRONLY);if (rfd < 0){cerr << "open failed, errno: " << errno << " , errnostring: " << strerror(errno) << endl;return 1;}string inbuffer;// 循环读取用户输入并写入管道while (true){cout << "Please Enter Your Message# ";getline(cin, inbuffer);if (inbuffer == "quit") break;ssize_t n = write(rfd, inbuffer.c_str(), inbuffer.size());if (n < 0){cerr << "write failed, errno: " << errno << " , errnostring: " << strerror(errno) << endl;}}// 关闭管道文件close(rfd);return 0;
}

结果:
在这里插入图片描述


未完待续

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

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

相关文章

详细分析Oracle中的tnsnames.ora基本知识 以及 PLSQL如何连接(附Demo)

目录 1. tnsnames.ora2. Demo3. 实战 1. tnsnames.ora Oracle 数据库网络配置文件&#xff0c;用于配置客户端与数据库服务器之间的连接 定义网络服务名称&#xff0c;客户端可以使用这些名称连接到数据库实例 基本的路径如下&#xff1a; Windows: ORACLE_HOME\network\ad…

MySQL 数据库安装全攻略

在本文中&#xff0c;将为您详细介绍 MySQL 数据库的两种安装方式&#xff1a;编译安装和二进制安装。无论您是新手还是有一定经验的开发者&#xff0c;相信这篇文章都能为您提供有价值的参考。 一、MySQL 的编译安装 &#xff08;一&#xff09;准备工作 首先&#xff0c;如…

QThread 与QObject::moveToThread利用Qt事件循环在子线程执行多个函数

1. QThread的两种用法 第一种用法就是继承QThread&#xff0c;然后覆写 virtual void run()&#xff0c; 这种用法的缺点是不能利用信号槽机制。 第二种用法就是创建一个线程&#xff0c;创建一个对象&#xff0c;再将对象moveToThread, 这种可以充分利用信号槽机制&#xff…

MySQL 支持的多种日期和时间类型

MySQL 支持的多种日期和时间类型 MySQL 支持多种日期和时间类型&#xff0c;包括&#xff1a; 1. DATE: 存储日期值&#xff08;年、月、日&#xff09;&#xff0c;格式为 YYYY-MM-DD&#xff0c;例如&#xff1a;2024-06-11。 2. TIME: 存储时间值&#xff08;小时、分钟、秒…

199.罗马数字转整数(力扣)

代码解决 class Solution { public:// 定义一个哈希表来存储罗马数字符号及其对应的整数值unordered_map<char, int> res {{I, 1},{V, 5},{X, 10},{L, 50},{C, 100},{D, 500},{M, 1000},};// 将罗马数字字符串转换为整数的函数int romanToInt(string s) {int num 0; …

ElasticSearch安装、配置详细步骤

一、环境及版本介绍 操作系统&#xff1a; Windows 10 软件版本&#xff1a; elasticsearch-7.17.22、kibana-7.17.22、IK-7.17.22 开发环境选择软件版本应提前考虑正式系统得环境&#xff0c;否则会产生软件与服务器环境不兼容得问题出现&#xff0c;ElasticSearch与环境支…

【机器学习300问】132、自注意力机制(Self-Attention)和传统注意力机制(Attention)的区别?

最近学习注意力机制的时候&#xff0c;发现相同的概念很多&#xff0c;有必要给这些概念做一下区分&#xff0c;不然后续的学习可能会混成一团。本文先区分一下自注意力机制和传统注意力机制。我会先直接给出它们之间有何区别的结论&#xff0c;然后通过一个例子来说明。 一、…

【C++题解】1711. 输出满足条件的整数1

问题&#xff1a;1711. 输出满足条件的整数1 类型&#xff1a;简单循环 题目描述&#xff1a; 有这样的两位数&#xff0c;其十位上的数字比个位上的数字要大&#xff0c;且十位和个位上的数字之和为偶数&#xff0c;请找出所有的满足条件的 2 位数。 输入&#xff1a; 无。…

Spring IOC 控制反转总结

Spring IOC 控制反转总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代Java开发中&#xff0c;Spring框架已成为不可或缺的工具&#xff0c;其核心概…

想法是否可行(学习笔记)

切入时机 进入市场的切入时机是否成熟&#xff0c;现有的技术手段和基础设施是否能够满足需求&#xff0c;用户的使用习惯和心理认知是怎么样的&#xff1f; 运营推广 有哪些渠道进行运营推广&#xff0c;产品的本身是否足够好&#xff0c;是否有足够的留存&#xff0c;是否能…

前端算法--括号⽣成

题⽬描述 数字 n 代表⽣成括号的对数&#xff0c;请你设计⼀个函数&#xff0c;⽤于能够⽣成所有可能的并且 有效的 括号组合。 示例&#xff1a; 输⼊&#xff1a; n 3 输出&#xff1a; [ "((()))", "(()())", "(())()", "()(()…

Unity的Excel转表工具

该Excel工具主要由Python语言完成&#xff0c;版本为3.x 主要功能&#xff1a; 1.转换后的数据存储结构为二进制。 2.excel文件可以选择多种数据类型&#xff1a;int、float、string、一维&#xff08;int、float、string&#xff09;、二维int、Map&#xff08;int/int、in…

Hive基础知识(十九):Hive 自定义函数

1. 自定义函数 1&#xff09;Hive 自带了一些函数&#xff0c;比如&#xff1a;max/min 等&#xff0c;但是数量有限&#xff0c;自己可以通过自定义 UDF 来方便的扩展。 2&#xff09;当 Hive 提供的内置函数无法满足你的业务处理需要时&#xff0c;此时就可以考虑使用用户自…

xcode15 升级大坑

Q&#xff1a;iOS17 SDK 模拟器 7个多G,一直安装失败&#xff0c;都是网络中断&#xff0c;试了第六次竟然硬生生下载并安装成功。如果实在不成功尝试一下步骤&#xff1a; 1.直接在Apple官网找到你要下载的文件&#xff0c;https://developer.apple.com/download/all/ 2.下…

golang常用库之-godotenv库从.env文件读取配置数据

文章目录 golang常用库之-从.env文件读取配置数据godotenv库使用 golang常用库之-从.env文件读取配置数据 godotenv库从.env文件中读取配置&#xff0c; 然后存储到程序的环境变量中。在代码中可以使用读取非常方便。 godotenv库 官方&#xff1a;https://pkg.go.dev/github…

图的搜索。

用邻接表作为图的存储结构建立一个图&#xff0c;并对此图分别进行深度优先搜索和广度优先搜索遍历。 #include<stdio.h> #include<stdlib.h> #define MAX_VERTEM_NUM 10 #define INFINITY 32768 typedef enum{ DG,DN,UDG,UDN }graghKind; //digraph D…

【AI应用探讨】—小型神经网络应用场景

目录 1. 移动设备 2. 物联网设备 3. 无人驾驶 4. 可穿戴设备 5. 其他领域 1. 移动设备 a. 图像识别 用例&#xff1a;在智能手机和平板电脑上运行的实时图像识别应用&#xff0c;如人脸识别、物体识别等。优势&#xff1a;小型神经网络能够在这些设备上快速运行&#xff…

Visual Studio Code 配置 java/maven 环境(Windows版)

在Windows版Visual Studio Code&#xff08;VS Code&#xff09;中配置Java和Maven环境&#xff0c;可以按照以下步骤进行&#xff1a; 1. 安装JDK 确保已经安装了JDK 8或更高版本。建议访问Oracle官网或OpenJDK官网下载相应版本的JDK。安装JDK后&#xff0c;配置系统环境变量…

OpenFeign 的请求处理流程

流程 1. 定义 Feign 客户端接口 首先&#xff0c;开发者需要定义一个 Feign 客户端接口&#xff0c;并使用 FeignClient 注解进行配置。例如&#xff1a; FeignClient(name "aService", url "http://localhost:8080") public interface ServiceProvid…

Python | Leetcode Python题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; class Solution:def majorityElement(self, nums: List[int]) -> int:count 0candidate Nonefor num in nums:if count 0:candidate numcount (1 if num candidate else -1)return candidate