news 2026/7/1 11:04:42

Linux:命名管道实现IPC(进程间通信七)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux:命名管道实现IPC(进程间通信七)

上篇博客我们说过在这篇博客我们将改进我们上篇博客写的,命名管道实现简易通信,下面是改进之后的代码,这里我不详细写出来,希望大家可以凭借上节课的知识以及代码内容,真正的自己理解并且复现一遍~~

Makefile:

.PHONEY : all all : server client server : server.cc g++ server.cc -o server client : client.cc g++ client.cc -o client .PHONEY : clean clean : rm -f client server

server.cc:

#include "common.hpp" int main() { NamedFifo fifo(PATH, FIFO_FILE); FifoOper server(PATH, FIFO_FILE); server.OpenForRead(); server.Read(); server.Close(); return 0; }

client.cc:

#include "common.hpp" int main() { FifoOper client(PATH, FIFO_FILE); client.OpenForWrite(); client.Write(); client.Close(); return 0; }

common.hpp:

#pragma once #include <iostream> #include <string> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define PATH "." #define FIFO_FILE "fifo" class NamedFifo { public: NamedFifo(std::string path, std::string name) : _path(path) , _name(name) { umask(0); _fifoname = _path + "/" + _name; int n = mkfifo(_fifoname.c_str(), 0666); if (n == -1) { std::cout << "mkfifo fail" << std::endl; } else { std::cout << "mkfifo success" << std::endl; } } ~NamedFifo() { int n = unlink(_fifoname.c_str()); if (n == -1) { std::cout << "~fifo fail" << std::endl; } else { std::cout << "~fifo success" << std::endl; } } private: std::string _path; std::string _name; std::string _fifoname; }; class FifoOper { public: FifoOper(std::string path, std::string name) : _path(path) , _name(name) , _fd(-1) { _fifoname = _path + "/" + _name; } ~FifoOper() { std::cout << "~FifoOper" << std::endl; } void OpenForRead() { _fd = open(_fifoname.c_str(), O_RDONLY); if (_fd < 0) { std::cout << "OpenForRead fail" << std::endl; return; } std::cout << "OpenForRead success" << std::endl; } void OpenForWrite() { _fd = open(_fifoname.c_str(), O_WRONLY); if (_fd < 0) { std::cout << "OpenForWrite fail" << std::endl; return; } std::cout << "OpenForWrite success" << std::endl; } void Read() { char buffer[1024]; while (true) { int number = read(_fd, buffer, sizeof(buffer) - 1); if (number > 0) { buffer[number] = '\0'; std::cout << "client say : " << buffer << std::endl; } else if (number == 0) { std::cout << "client quit! server quit, too!" << std::endl; break; } else { std::cout << "Read error" << std::endl; break; } } } void Write() { std::string message; while (true) { std::cout << "please enter# "; std::getline(std::cin, message); write(_fd, message.c_str(), message.size()); } } void Close() { if (_fd > 0) close(_fd); } private: std::string _path; std::string _name; std::string _fifoname; int _fd; };

这就算有关管道通信的知识啦(命名管道与匿名管道),但是我们的通信之旅还没有完,大家敬请期待后续内容啦~~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 12:46:57

Qwen2.5-7B多语言翻译系统实战:支持阿拉伯语输出部署教程

Qwen2.5-7B多语言翻译系统实战&#xff1a;支持阿拉伯语输出部署教程 1. 引言&#xff1a;为什么选择Qwen2.5-7B构建多语言翻译系统&#xff1f; 1.1 多语言翻译的现实挑战 在全球化背景下&#xff0c;跨语言信息交流需求激增。传统机器翻译模型&#xff08;如Google Transla…

作者头像 李华
网站建设 2026/7/1 12:51:07

【人工智能学习-AI-MIT公开课第 18. 表示:分類、軌跡、過渡】

人工智能学习-AI-MIT公开课第 18. 表示&#xff1a;分類、軌跡、過渡1-前言2-课程链接3-具体内容解释说明一句话总览&#xff08;先记这个&#xff09;① 分類&#xff08;Classification&#xff09;是什么表示方式的核心入试常考点② 軌跡&#xff08;Trajectory&#xff09;…

作者头像 李华
网站建设 2026/7/1 12:43:46

Windows Auto Dark Mode:让电脑主题随你心意自动切换的智能神器

Windows Auto Dark Mode&#xff1a;让电脑主题随你心意自动切换的智能神器 【免费下载链接】Windows-Auto-Night-Mode 项目地址: https://gitcode.com/gh_mirrors/win/Windows-Auto-Night-Mode 你是否曾经在深夜工作时被刺眼的白色界面折磨得眼睛酸痛&#xff1f;是否…

作者头像 李华
网站建设 2026/7/1 12:43:45

Qwen3-VL-WEBUI办公自动化:表格识别系统

Qwen3-VL-WEBUI办公自动化&#xff1a;表格识别系统 1. 引言&#xff1a;为何需要智能表格识别&#xff1f; 在现代办公场景中&#xff0c;非结构化文档的数字化处理已成为企业效率提升的关键瓶颈。尤其是包含复杂排版、合并单元格、跨页表格的PDF或扫描件&#xff0c;传统OC…

作者头像 李华
网站建设 2026/7/1 12:45:04

Qwen3-VL GUI测试:自动化软件测试案例分享

Qwen3-VL GUI测试&#xff1a;自动化软件测试案例分享 1. 背景与技术选型 在当前智能化测试快速发展的背景下&#xff0c;传统基于脚本的GUI自动化测试正面临维护成本高、适应性差、难以应对动态界面等挑战。随着大模型技术的演进&#xff0c;视觉-语言模型&#xff08;VLM&a…

作者头像 李华
网站建设 2026/7/1 12:43:47

我的岛屿设计大冒险:从空白画布到梦想天堂

我的岛屿设计大冒险&#xff1a;从空白画布到梦想天堂 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)"&#xff0c;是一个在线工具&#xff0c;它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal Crossing)启发而创建的…

作者头像 李华