• 有名管道,简单的理解可以理解成,一个通过命名不同来实现通信的一种方式。
  • 简单的有名管道实现逻辑如下:
* 1. CreateNamedPipe 创建一个有名管道,在系统中
* 2。::ConnectNamedPipe 监听客户端的连接,获取数据

作为客户端而言

1.::WaitNamedPipe(PIPE_CLIENT_NAME, NMPWAIT_WAIT_FOREVER)// 连接到有名管道
2.::CreateFile 打开有名管道
3.WriteFile:往有名管道内记录数据
  • 实例代码
    ** 服务端部分
// PipeConnection.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
using namespace std;#define PIPE_SERVER_NAME L"\\\\.\\pipe\\Pipe_Server"
#define BUF_SIZE 1024//创建管道服务端
bool CreatePipeServer()
{//创建命名管道char buf_msg[BUF_SIZE];DWORD num_rcv; //实际接收到的字节数HANDLE h_pipe = ::CreateNamedPipe(PIPE_SERVER_NAME,PIPE_ACCESS_INBOUND,PIPE_READMODE_BYTE|PIPE_WAIT,PIPE_UNLIMITED_INSTANCES,BUF_SIZE,BUF_SIZE,0,nullptr);if (h_pipe == INVALID_HANDLE_VALUE){cout << "无效管道" << endl;return false;}//等待客户端连接if (::ConnectNamedPipe(h_pipe,nullptr)){memset(buf_msg,0,BUF_SIZE);if (::ReadFile(h_pipe,buf_msg,BUF_SIZE,&num_rcv,nullptr)){cout << buf_msg << endl;}}::CloseHandle(h_pipe);
}int _tmain(int argc, _TCHAR* argv[])
{CreatePipeServer();system("pause");return 0;
}
  • 客户端部分
// PipeClientConnection.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#define PIPE_CLIENT_NAME L"\\\\.\\pipe\\Pipe_Server"#define BUF_SIZE 1024
using namespace std;//创建客户端连接
bool CreateClientPipe()
{HANDLE h_pipe;char buf_msg[] = "Test for named pipe...";DWORD num_rcv; //实际接收到的字节数cout << "Try to connect named pipe...\n";//连接命名管道if (::WaitNamedPipe(PIPE_CLIENT_NAME, NMPWAIT_WAIT_FOREVER)){//打开指定命名管道h_pipe = ::CreateFile(PIPE_CLIENT_NAME, GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);if (h_pipe == INVALID_HANDLE_VALUE){cerr << "Failed to open the appointed named pipe!Error code: " << ::GetLastError() << "\n";::system("pause");return 0;}else{if (::WriteFile(h_pipe, buf_msg, BUF_SIZE, &num_rcv, nullptr)){cout << "Message sent successfully...\n";}else{cerr << "Failed to send message!Error code: " << ::GetLastError() << "\n";::CloseHandle(h_pipe);::system("pause");return 1;}}::CloseHandle(h_pipe);}return false;
}int _tmain(int argc, _TCHAR* argv[])
{CreateClientPipe();return 0;
}

C++有名管道通信简单示例相关推荐

  1. 双进程有名管道通信应用实例

    更多资料请点击:我的目录 本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢. 要求: p1和p2两个进程通信,用有名管道实现 需要两个管道文件 第一个 ...

  2. Win Api 有名管道通信--扫雷辅助(四)

    有名管道的使用 同linux 下一样 通过有名管道 实现非父子进程(资源继承)关系的 进程间通信(Inter Process Communicate) 无名管道是通过内核进行内存共享 , 而有名管道是 ...

  3. 有名管道(FIFO)实现无亲缘关系的客户服务器

     FIFO(也称为有名管道)是first in first out的意思,也就是队列的特点.有名管道也是一个单向的数据流,但它与管道又有写区别.有名管道是有名字的,每一个FIFO对应于一个路径名,正因 ...

  4. Linux 3.进程间通信(IPC)(pipe 无名管道、mkfifo 有名管道、ftok、msgget、msgrcv、msgsnd、msgctl 消息队列)

    Linux 3.进程间通信(IPC) 进程间通信: 进程间方式: pipe 管道(无名管道) 头文件及原型 特点 pipe 示例 FIFO(有名管道) 管道文件的创建 mkfifo 头文件及原型 mk ...

  5. 无名管道(PIPE)与 有名管道(FIFO)

    更多资料请点击:我的目录 本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢. 无名管道(PIPE)部分: (1)无名管道的创建: 头文件: #incl ...

  6. 【嵌入式总复习】Linux管道详解——管道通信、无名管道、有名管道、具体应用示例

    目录 管道 1. 管道通信 1.1 通信模式 1.2 管道通信中特殊的名词 2. 无名管道(PIPE) 2.1 无名管道的通信原理 2.2 无名管道特点 2.3 如何操作无名管道 示例1 示例2 3. ...

  7. Linux-C语言-利用有名管道简单实现两个进程间的全双工通信

    有名管道特点: 1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到. 2.半双工的通信方式,进程通过文件IO来操作有名管道. 3.有名管道遵 ...

  8. linux进程通信中有名管道的特点,linux进程通信之(四):有名管道的读与写

    前面我们说了无名管道,下面我们来说说有名管道,请看下面一段代码: fifo_write.c: #include#include#include#include#include#include#incl ...

  9. 6.进程通信 无名管道 有名管道

    进程间通信(IPC,InterProcess Communication) 概念:就是进程和进程之间交换信息. 常用通信方式 无名管道(pipe) 有名管道 (fifo) 信号(signal) 共享内 ...

最新文章

  1. SQLServer数据库试题及答案
  2. 用seaborn 画出唯美的论文专用图片,自己定制python画图的数据集
  3. 数组和lookup函数
  4. javax线程池超时结束_没有Javax的Jakarta EE:这次世界也不会结束
  5. oracle 日志丢失,Oracle联机日志文件丢失解决方法一例
  6. The Closest M Points BZOJ 3053
  7. html hint标签,htmlhint
  8. 火狐浏览器百度网盘服务器响应,火狐浏览器打不开百度网盘怎么解决?解决百度网盘打不开的步骤分享...
  9. 5款手机通讯录同步工具
  10. 坑爹的matlab除法
  11. 飞行控制PID算法——无人机飞控
  12. 【010 Editor】010 Editor安装教程
  13. Drain基于固定深度解析树
  14. cairo和pixman库给bmp图片加文字水印
  15. 真正带你搞懂RecyclerView的缓存机制,Android岗
  16. 凡子谷机器人创客教育_创客机器人教育基地
  17. Centos7登陆颜色修改#PS1
  18. 格林纳达常驻WTO大使孙宇晨受邀出席美驻新大使的闭门午宴
  19. 自动发邮件的程序 c语言,C语言实现发送邮件.md
  20. 学校行政会议管理系统

热门文章

  1. SpringBoot中如何实现全链路调用日志跟踪?这方法才优雅!
  2. String被设计成不可变和不能被继承的原因
  3. Java多线程学习九:怎样确定线程数量及CPU 核心数和线程数的关系||如何定制自己的线程池
  4. 2021高考技能考试成绩查询,2021年临床技能考试成绩出来了!附查询方式
  5. Springboot的web开发-静态资源
  6. ORACLE数据库的备份和还原。
  7. POJ 3667 hotel(shǎ崽大神的模板|区间合并)
  8. Properties类 解析xml文件问题
  9. axios下载图片 node_vue+node.js手把手教你搭建一个直播平台(二)
  10. redis 客户端_你在使用什么 Redis 客户端工具?