C++ 管道
// PipeServer.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <process.h>
using namespace std;
#pragma warning(disable:4996) HANDLE hClose = NULL; unsigned int _stdcall ProcessPipe(void *lp)
{
HANDLE hPipeServer = (HANDLE)lp;
BYTE btRead[MAX_PATH] = {0}; DWORD dwTime = GetTickCount();
while (GetTickCount() - dwTime < 10000){
DWORD dwRead = 0;
BOOL bRet = ReadFile(hPipeServer, btRead, MAX_PATH, &dwRead, NULL);
if (!bRet){
if (GetLastError() == ERROR_BROKEN_PIPE ){
break;
}
}
else{
printf("%s\n", btRead);
ZeroMemory(btRead, MAX_PATH);
strcpy((char*)btRead, "RecvInfo");
DWORD dwWrite = 0;
bRet = WriteFile(hPipeServer, btRead, strlen((char*)btRead), &dwWrite, NULL);
}
Sleep(20);
} SetEvent(hClose);
DWORD dwExitCode = 0;
GetExitCodeThread(GetCurrentThread(), &dwExitCode);
_endthreadex(dwExitCode);
return 0;
} int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hPipeServer = CreateNamedPipe(L"\\\\.\\pipe\\pipeServer",
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
4096,
4096,
NMPWAIT_USE_DEFAULT_WAIT,
NULL
);
if (hPipeServer == INVALID_HANDLE_VALUE){
printf("CreateNamedPipe failed with error %d", GetLastError());
return 0;
} BOOL bRet = ConnectNamedPipe(hPipeServer, NULL);
if (!bRet){
printf("ConnectNamedPipe failed with error %d", GetLastError());
return 0;
} hClose = CreateEvent(NULL, true, false, NULL);
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, ProcessPipe, (LPVOID)hPipeServer, 0, NULL);
CloseHandle(hThread); WaitForSingleObject(hClose, INFINITE);
CloseHandle(hPipeServer); return 0;
}
.cpp
// PipeClient.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include <windows.h>
#include <process.h>
using namespace std;
#pragma warning(disable:4996) int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hPipe = CreateFile(
L"\\\\.\\pipe\\pipeServer", // pipe name
GENERIC_READ | GENERIC_WRITE,
0, // no sharing
NULL, // default security attributes
OPEN_EXISTING, // opens existing pipe
0, // default attributes
NULL); char strInfo[MAX_PATH] = {0};
strcpy(strInfo, "12sdfgsgdfg");
DWORD dwWrite = 0;
WriteFile(hPipe, strInfo, strlen(strInfo), &dwWrite, NULL);
Sleep(500);
ZeroMemory(strInfo, MAX_PATH);
DWORD dwRead = 0;
ReadFile(hPipe, strInfo, MAX_PATH, &dwRead, NULL);
printf("%s\n", strInfo);
Sleep(8000);
CloseHandle(hPipe);
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
C++ 管道的更多相关文章
- ASP.NET Core HTTP 管道中的那些事儿
前言 马上2016年就要过去了,时间可是真快啊. 上次写完 Identity 系列之后,反响还不错,所以本来打算写一个 ASP.NET Core 中间件系列的,但是中间遇到了很多事情.首先是 NPOI ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理
.NET Core中间件的注册和管道的构建(1)---- 注册和构建原理 0x00 问题的产生 管道是.NET Core中非常关键的一个概念,很多重要的组件都以中间件的形式存在,包括权限管理.会话管理 ...
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?
注册的服务器和中间件共同构成了ASP.NET Core用于处理请求的管道, 这样一个管道是在我们启动作为应用宿主的WebHost时构建出来的.要深刻了解这个管道是如何被构建出来的,我们就必须对WebH ...
- 学习ASP.NET Core, 怎能不了解请求处理管道[5]: 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
中间件的注册除了可以借助Startup对象(DelegateStartup或者ConventionBasedStartup)来完成之外,也可以利用另一个叫做StartupFilter的对象来实现.所谓 ...
- 学习ASP.NET Core, 怎能不了解请求处理管道[4]: 应用的入口——Startup
一个ASP.NET Core应用被启动之后就具有了针对请求的处理能力,而这个能力是由管道赋予的,所以应用的启动同时意味着管道的成功构建.由于管道是由注册的服务器和若干中间件构成的,所以应用启动过程中一 ...
- 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的
我们在<服务器在管道中的"龙头"地位>中对ASP.NET Core默认提供的具有跨平台能力的KestrelServer进行了介绍,为了让读者朋友们对管道中的服务器具有更 ...
- 学习ASP.NET Core,怎能不了解请求处理管道[2]: 服务器在管道中的“龙头”地位
ASP.NET Core管道由注册的服务器和一系列中间件构成.我们在上一篇中深入剖析了中间件,现在我们来了解一下服务器.服务器是ASP .NET Core管道的第一个节点,它负责完整请求的监听和接收, ...
随机推荐
- 在linux环境中如何删除文件
使用rm -rf 目录名字 命令即可 -r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 eg 删除文件夹实例:rm -rf /var/log/httpd/acc ...
- 「NOIP2011」观光公交
传送门 Luogu 解题思路 有点麻烦,幸好 \(O(n^2)\) 能过... 贪心地想一想,我们如果要用加速器,肯定是要选择车上人数最多的时段加速. 但是我们就会面临这样的情况: 加速了,带来了增益 ...
- SciPy k均值聚类
章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...
- Python学习笔记之基础篇(三)python 数据类型 int str bool 详谈
python 的数据类型: 1.int:存放 1,2,3 等数据 ,用于数字的运算 2.bool :True, False 用于判断 3.str:字符串,用来存储少量的数据 4.list : 数组的 ...
- 5G/NR OTA (Over The Air) 测试详解
原文链接:http://www.sharetechnote.com/html/5G/5G_OTA.html 1 什么是OTA (Over The Air) OTA代表Over The Air.为了使用 ...
- 侯捷C++学习(一)
//c++学习//标准库非常重要//要规范自己的代码complex c1(2,1);complex c2;complex* pc = new complex(0,1);string s1(" ...
- RAM和ROM的区别
区别如下: 1.概念 RAM(random access memory)即随机存储内存,这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序.ROM(Read-Only Memory)即 ...
- java提升一:内部类
1.总体定义 定义在一个类中的类,就称之为内部类. 2.为什么要使用内部类 (1)使用匿名内部类,无需对只使用一次的接口实现类进行创建,方便了对于接口和抽象类的实现及其使用. (2)每个内部类都可以独 ...
- ASP.NETCore -----导出Excel文件并下载
本事例分为nopi(安装DotNetCore.NPOI)下载和EPPlus(EPPlus.Core.dll)下载,其中npoi下载演示的是根据执行的模板进行数据下载 npoi帮助类NpoiExcelU ...
- 使用jquery版本的viewer.js图片更新的问题
参考博客: 使用jquery版本的viewer.js图片更新的问题 - cc_fys的博客 - CSDN博客 https://blog.csdn.net/cc_fys/article/details/ ...