【管道】(二) 管道通信

文章目录
  1. 1. 管道
  2. 2. 创建管道的方式一 CreateNamedPipe
    1. 2.1. 原型
    2. 2.2. 参数说明
    3. 2.3. 用法
  3. 3. 创建管道的方式二 CreateFile
    1. 3.1. 原型
    2. 3.2. 参数说明
    3. 3.3. 用法
  4. 4. Demo1——管道客户端和服务端的控制台程序
  5. 5. Demo2——管道类

本文所讲管道通信主要是进程间管道通信。

[toc]

管道

命名管道的通信是在一个命名管道服务器和一个命名管道客户之间进行的。命名管道服务器是指创建爱你命名管道的应用程序,客户可以连接到它所创建的命名管道上。命名管道的 名称的格式\\Server\pipe\PipeName

  • 名称中的Server部分指定了此命名管道服务器当前执行所在的计算机(需要注意的是:命名管道服务器不能创建远程系统上的命名管道)。但是这个名称可以是一个DNS名称(比如,mspress.microsoft.com)、一个NetBIOS名称(mspress)或者一个IP地址(131.107.0.1)。
  • 名称中的 Pipe 部分必须是字符串 Pipe。而 PipeName 则是分配给此命名管道的唯一名。命名管道名称中的唯一名部分可以包含子目录。如:\\MyComputer\Pipe\MyServerApp\ConnectionPipe 是一个包含子目录的命名管道名称的例子。

综上,我们在一个示例程序中创建的管道可以命名为 \\.\pipe\DemoApp\test.pip (使用转义也就是\\\\.\\pipe\\DemoApp\\test_pip),这里的 \ 代表的是本地计算机。


而以上的管道名,也就是我们后续调用API的参数之一,也是我们唯一可以标识管道的标志。

创建管道的方式一 CreateNamedPipe

原型

1
2
3
4
5
6
7
8
9
10
HANDLE CreateNamedPipeA(
[in] LPCSTR lpName,
[in] DWORD dwOpenMode,
[in] DWORD dwPipeMode,
[in] DWORD nMaxInstances,
[in] DWORD nOutBufferSize,
[in] DWORD nInBufferSize,
[in] DWORD nDefaultTimeOut,
[in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

参数说明

  1. lpName
    要创建的管道名。
  2. dwOpenMode
  3. dwPipeMod
  4. nMaxInstances
  5. nOutBufferSize
  6. nInBufferSize
  7. nDefaultTimeOut
  8. lpSecurityAttributes

用法

创建管道的方式二 CreateFile

原型

1

参数说明

用法

Demo1——管道客户端和服务端的控制台程序

Demo2——管道类

知识来源: