admin 管理员组

文章数量: 1086019


2024年3月13日发(作者:web中label标签作用)

windows 命名管道的例子

命名管道(named pipe)是一种在进程之间传递数据的通信机制,

Windows操作系统支持命名管道通信。以下是一个简单的示例,演示了如

何在两个进程之间使用命名管道进行通信:

服务器端(监听命名管道)

1. 创建一个命名管道的实例,并指定管道的名称。

2. 打开命名管道,并等待客户端连接。

3. 从命名管道读取数据,进行处理。

4. 将数据写入命名管道,发送给客户端。

5. 关闭命名管道。

示例代码(使用C++):

```cpp

include <>

include

int main() {

// 创建命名管道实例,指定管道名称

HANDLE hPipe = CreateNamedPipe(

L".pipemy_named_pipe", // 管道名称

PIPE_ACCESS_DUPLEX, // 双向访问模式

PIPE_TYPE_BYTE PIPE_READMODE_BYTE, // 字节类型,字节模

式读取

1, // 最大连接数

65536, // 缓冲区大小

65536, // 接收缓冲区大小

0, // 空闲时间限制(毫秒)

NULL // 安全属性

);

if (hPipe == INVALID_HANDLE_VALUE) {

std::cerr << "Failed to create named pipe." << std::endl;

return 1;

}

// 打开命名管道,等待客户端连接

if (!ConnectNamedPipe(hPipe, NULL)) {

std::cerr << "Failed to connect to named pipe." << std::endl;

CloseHandle(hPipe);

return 1;

}

// 从命名管道读取数据,并进行处理...

// ...

// 将数据写入命名管道,发送给客户端...

// ...

// 关闭命名管道

CloseHandle(hPipe);

return 0;

}

```

客户端端(连接到命名管道)

1. 打开命名管道。

2. 从命名管道读取数据。

3. 将数据写入命名管道。

4. 关闭命名管道。

示例代码(使用C++):

```cpp

include <>

include

int main() {

// 打开命名管道,连接到服务器端...

HANDLE hPipe = CreateFile(

L".pipemy_named_pipe", // 管道名称

GENERIC_READ GENERIC_WRITE, // 读写访问模式

0, // 共享模式(独占打开)

NULL, // 安全属性(默认)

OPEN_EXISTING, // 打开已存在的管道(独占打

开)

0, // 文件属性(无)

NULL // 模板文件(无)

);

if (hPipe == INVALID_HANDLE_VALUE) {

std::cerr << "Failed to open named pipe." << std::endl;

return 1;

}

// 从命名管道读取数据...

// ...

// 将数据写入命名管道...

// ...

// 关闭命名管道...

CloseHandle(hPipe); // 注意:关闭句柄后,连接会被断开,不能再写

入数据。如果需要继续写入,可以在关闭句柄之前使用FlushFileBuffers函

数。

return 0;

}

```


本文标签: 管道 命名 打开 连接 写入