Windows命名管道学习记录

前言

编程菜鸟,第一次接触进程间通信,网上windows命名管道的资料太少了,很多还是错的,学起来很费劲,现在也只能说跑的通程序了,记录一下防止忘记,理解没有很深,可能会有错误,仅供参考

golang实现命名管道的方式

使用"golang.org/x/sys/windows"包实现
服务端初始化:

func initPipe(pipeName string) (windows.Handle, error) {// 创建命名管道pipe, err := windows.CreateNamedPipe(windows.StringToUTF16Ptr(pipeName),windows.PIPE_ACCESS_DUPLEX,windows.PIPE_TYPE_MESSAGE|windows.PIPE_READMODE_MESSAGE|windows.PIPE_WAIT,windows.PIPE_UNLIMITED_INSTANCES,1024,1024,0,nil,)if err != nil {fmt.Println("Error creating named pipe:", err)return pipe, err}// 等待客户端连接fmt.Println("Waiting for client connection...")err = windows.ConnectNamedPipe(pipe, nil)if err != nil {fmt.Println("Error connecting to named pipe:", err)return pipe, err}return pipe, nil
}

客户端初始化:

const pipeName = `\\.\pipe\my_named_pipe`pipe, err := windows.CreateFile(windows.StringToUTF16Ptr(pipeName),windows.GENERIC_READ|windows.GENERIC_WRITE,0,nil,windows.OPEN_EXISTING,0,0,)if err != nil {return}

读写数据:

err = windows.WriteFile(pipe, m, nil, nil)
var bytes uint32
err := windows.ReadFile(pipe, buf, &bytes, nil)

其中第一个参数是读写的管道,第二个参数是读(写)数据的目标(源),第三个参数是读写数据的长度,第四个数据是表示是否是异步,正常阻塞式的命名管道设为nil即可。
写入数据时不关心写入了多少,所以第三个参数设为了nil。读数据时是通过建立一个足够大的字节数组作为缓冲区读取的,所以需要第三个参数知道读取了多长的数据来进行截取,得到正确的数据

通信方式

命名管道(Named Pipes)是半双工通信机制。在半双工通信中,数据传输只能在一个方向上进行,即一方发送数据,另一方接收数据。这意味着在同一时间内,命名管道只能支持数据的单向传输,要实现双向通信,需要创建两个管道,一个用于发送,另一个用于接收。

我最开始不知道半双工通信,测试发现有时候能跑通有时候不行,后来关了一个方向的通信就好了,查了一下发现果然是半双工通信

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

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

相关文章

我维护电脑的方法

无论是学习还是工作,电脑都是IT人必不可少的重要武器,一台好电脑除了自身配置要经得起考验,后期主人对它的维护也是决定它寿命的重要因素! 你日常是怎么维护你的“战友”的呢,维护电脑运行你有什么好的建议吗&#xff…

1749. 任意子数组和的绝对值的最大值

诸神缄默不语-个人CSDN博文目录 力扣刷题笔记 文章目录 1. 暴力搜索2. 动态规划3. 前缀和 1. 暴力搜索 直接用2个指针从索引0开始找到最后一个索引,时间复杂度大概是 O ( n 2 ) O(n^2) O(n2)吧,总之这么搞不行,以下是我用Python写的一些典型…

设计模式之六:命令模式(封装调用)

命令模式可以将请求的对象和执行请求的对象解耦(实际上是通过命令对象进行沟通,即解耦)。(个人感觉,这章讲的很一般) 按个人理解来讲: 假如需要一个遥控器,遥控器有一个插口可以插上…

【JAVA】有关时间的操作在编程中如何实现?

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言Date 类Date 类方法Data的缺陷实例获取当前日期时间日期比较java中设置date数据的显示格式 前言 在许多应用程序中,日期和时间的处理是必不可少的。Java提供了一…

【80天学习完《深入理解计算机系统》】第二天 2.2 整数的表示【有符号数,无符号数,符号数的扩展,有无符号数的转变】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

【Matlab】Elman神经网络遗传算法(Elman-GA)函数极值寻优——非线性函数求极值

往期博客👉 【Matlab】BP神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值 【Matlab】GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值 【Matlab】RBF神经网络遗传算法(RBF-GA)函数极值寻优——非线性函数求极值 本篇博客将主要介绍Elman神…

【数据结构】“单链表”的练习题

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

Unity之ShaderGraph 节点介绍 数学节点

数学 高级Absolute(绝对值)Exponential(幂)Length(长度)Log(对数)Modulo(余数)Negate(相反数)Normalize(标准化矢量&…

Django Rest_Framework(二)

文章目录 1. http请求响应1.1. 请求与响应1.1.1 Request1.1.1.1 常用属性1).data2).query_params3)request._request 基本使用 1.1.2 Response1.1.2.1 构造方式1.1.2.2 response对象的属性1).data2).status_code3&…

技术应用:Docker安全性的最佳实验|聊聊工程化Docker

🔥 技术相关:《技术应用》 ⛺️ I Love you, like a fire! 文章目录 首先,使用Docker Hub控制访问其次,保护密钥写在最后 不可否认,能生存在互联网上的软件都是相互关联的,当我们开发一款应用程序时&#x…

Prometheus技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》

一、查看可安装的版本 docker search prom/prometheus 二、拉取镜像 docker pull prom/prometheus 三、查看镜像 docker images 四、书写配置文件-以及创建挂载目录 宿主机挂载目录位置: 以及准备对应的挂载目录: /usr/local/docker/promethues/se…

字节C++后端面试总结

字节的面经,技术栈是 C++ 后端。 计算机网络 UDP和TCP区别 先说了概念一个是面向连接的基于字节流的可靠连接,一个是不需要连接的基于数据报的不可靠传输 然后说了几个小点,比如首部长度、应用场景、服务对象什么的。 补充: 还有一个很重要的点:UDP 的实时性比 TCP 好…

Kotlin基础(十一):反射和注解

前言 本文主要讲解kotlin反射和注解。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 kotlin反射 1.1.1 kotlin反射概念和常见使用场景 在Kotlin中,反射是一种能够在运行时动态地获取、检查和操作类、属性、方法等结构的能力。Kotlin为反射提供了一…

【多重信号分类】超分辨率测向方法——依赖于将观测空间分解为噪声子空间和源/信号子空间的方法具有高分辨率(HR)并产生准确的估计(Matlab代码实现)

【多重信号分类】超分辨率测向方法——依赖于将观测空间分解为噪声子空间和源/信号子空间的方法具有高分辨率(HR)并产生准确的估计(Matlab代码实现) 💥💥💞💞欢迎来到本博客❤️❤️…

uniapp 微信小程序 echarts地图 点击显示类目

效果如图: 在tooltip内axisPointer内添加 label:{show:true} 即可显示“请求离婚”的标题

护网专题简单介绍

护网专题简单介绍 一、护网红蓝队介绍1.1、网络安全大事件1.2、护网行动由来1.3、护网行动中的角色二、红队介绍2.1、红队所需技能2.2、红队攻击流程 三、蓝队介绍3.1、蓝队所需技能3.2、蓝队防守四阶段3.3、蓝队前期准备 四、常见安全厂商介绍4.1、常见安全厂商 五、常见安全产…

什么是Java中的装饰器模式?

Java中的装饰器模式是一种结构型设计模式,它允许你通过添加额外的功能来扩展对象的行为。这种模式有点类似于给对象穿上衣服,你可以添加不同的装饰器来改变对象的外观和行为。 在Java中,装饰器模式通常通过创建一个接口来实现,该…

剑指Offer55-I.二叉树的深度 C++

1、题目描述 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 …

Go和Java实现原型模式

Go和Java实现原型模式 下面将通过一个克隆的示例来说明原型模式的使用。 1、原型模式 原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对 象的最佳方式之一。 这种模式是实现了一个原型接口&am…

使用罗技鼠标后 弹出当前页面的脚本发生错误AppData/Local/Temp/LogiUI/Pak/js/jquery-1.3.2.min.js解决

使用的台式机,没有蓝牙驱动,在用logi无线鼠标时,把鼠标连接插入台式机后弹出的如上图所示这个提示,无论是点是/否,还是X掉上图提示,电脑右下角的图依然存在。不习惯这丫的存在。 我重启还是有,然…