创建命名管道示例

  进行间可以通过剪贴板,匿名管道,命名管道或邮槽进行通信。命名管道服务器的创建:首先创建命名管道句柄(格式:\\<SERVERADDRESS>\PIPE\<PIPENAME>),然后连接命名管道(如果使用重叠对象,ConnectNamedPipe函数调用完成之后立即返回),接着等待客户端连接(当客户端连接服务器成功后,系统将会设置重叠对象中的事件对象为有信号),最后通过WriteFile或ReadFile进行命名管道读或写操作与客户端通信。命名管道客户端的创建:首先等待命名管道(连接成功之后方可进行下一步操作),接着调用CreateFile创建命名管道句柄,最后通过WriteFile或ReadFile进行命名管道读或写操作与服务器通信。

//
// Np : NamedPipe
//
#include <windows.h>

HANDLE g_hNpServer = INVALID_HANDLE_VALUE;
HANDLE g_hNpClient = INVALID_HANDLE_VALUE;
static LPCTSTR g_szNpName = _T("\\\\.\\PIPE\\Server"); // 命名管道名称

/// <summary>创建命名管道服务端</summary>
/// <return>是否创建成功</return>
BOOL CreateNpServer()
{
 g_hNpServer = CreateNamedPipe(g_szNpName, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
  0, 1, 1024, 1024, NMPWAIT_WAIT_FOREVER, NULL);
 
 OVERLAPPED overlapped;
 memset(&overlapped, 0, sizeof(OVERLAPPED));
 overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

 ConnectNamedPipe(g_hNpServer, &overlapped);
 WaitForSingleObject(overlapped.hEvent, INFINITE);

 return TRUE;
}

/// <summary>创建命名管道客户端</summary>
/// <return>是否创建成功</return>
BOOL CreateNpClient()
{
 WaitNamedPipe(g_szNpName, NMPWAIT_WAIT_FOREVER);

 g_hNpClient = CreateFile(g_szNpName, GENERIC_READ | GENERIC_WRITE, 0, NULL,
  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 
 return TRUE;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值