管道分为 匿名管道命名管道

1.匿名管道仅仅能在父子进程间进行通信。不能在网络间通信,并且传输数据是单向的。仅仅能一端写,还有一端读。

2.命令管道能够在随意进程间通信。通信是双向的,随意一端都可读可写,可是在同一时间仅仅能有一端读、一端写。

每个 命名管道 都有一个唯一的名字以区分于存在于系统的命名对象列表中的其它命名管道。管道server在调用CreateNamedPipe()函数创建命名管道的一个或多个实例时为其指定了名称。

对于管道客户机。则是在调用CreateFile()或CallNamedPipe()函数以连接一个命名管道实例时对管道名进行指定。

命名管道的命名规范与邮槽有些相似。对其标识也是採用的UNC格式:

\\Server\Pipe\[Path]Name 

当中。第一部分\Server指定了server的名字,命名管道服务即在此server创建。其字串部分可表示为一个小数点(表示本机)、星号(当前网络字段)、域名或是一个真正的服务;第二部分\Pipe与邮槽的\Mailslot一样是一个不可变化的硬编码字串,以指出该文件是从属于NPFS;第三部分[Path]Name则使应用程序能够唯一定义及标识一个命名管道的名字。并且能够设置多级文件夹。

服务端使用函数:

CreateNamedPipe(); // 创建管道
ConnectNamedPipe(); // 堵塞。等待client连接

client使用函数:

CreateFile(); // 打开(连接)管道  

两方共用函数

WriteFile();
ReadFile(); // 堵塞,使用方便
CloseHandle(); // 关闭管道,断开连接

server端代码演示样例:

#include <stdio.h>
#include <windows.h> #define PIPE_NAME L"\\\\.\\Pipe\\test" HANDLE g_hPipe = INVALID_HANDLE_VALUE; int main()
{
char buffer[1024];
DWORD WriteNum; printf("test server.\n");
g_hPipe = CreateNamedPipe(PIPE_NAME, PIPE_ACCESS_DUPLEX, \
PIPE_TYPE_BYTE|PIPE_READMODE_BYTE , 1, 0, 0, 1000, NULL);
if(g_hPipe == INVALID_HANDLE_VALUE)
{
printf("Create name pipe failed!\n");
goto out;
} printf("Wait for connect...\n");
if(ConnectNamedPipe(g_hPipe, NULL) == FALSE)
{
printf("Connect failed!\n");
goto out;
}
printf("Connected.\n"); while(1)
{
scanf("%s", &buffer);
if(WriteFile(g_hPipe, buffer, (DWORD)strlen(buffer), &WriteNum, NULL) == FALSE)
{
printf("Write failed!\n");
break;
}
} out:
printf("Close pipe.\n");
CloseHandle(g_hPipe);
system("pause");
return 0;
}

client代码演示样例:

#include <stdio.h>
#include <windows.h> #define PIPE_NAME L"\\\\.\\Pipe\\test" HANDLE g_hPipe = INVALID_HANDLE_VALUE; int main()
{
char buffer[1024];
DWORD ReadNum; printf("test client.\n"); g_hPipe = CreateFile(PIPE_NAME, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (g_hPipe == INVALID_HANDLE_VALUE)
{
printf("Connect pipe failed!\n");
goto out;
}
printf("Connected.\n"); while(1)
{
if(ReadFile(g_hPipe, buffer, sizeof(buffer), &ReadNum, NULL) == FALSE)
{
break;
}
buffer[ReadNum] = 0;
printf("%s\n", buffer);
}
out:
printf("Close pipe.\n");
CloseHandle(g_hPipe);
system("pause");
return 0;
}

windows pipe的更多相关文章

  1. .NET Core装饰模式和.NET Core的Stream

    该文章综合了几本书的内容. 某咖啡店项目的解决方案 某咖啡店供应咖啡, 客户买咖啡的时候可以添加若干调味料, 最后要求算出总价钱. Beverage是所有咖啡饮料的抽象类, 里面的cost方法是抽象的 ...

  2. .NET Core/.NET之Stream简介

    之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core/.NET的Streams 首先需要知道, Syst ...

  3. .NET Core/.NET之Stream简介 Rx.NET 简介

    .NET Core/.NET之Stream简介   之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core ...

  4. 使用C# (.NET Core) 实现装饰模式 (Decorator Pattern) 并介绍 .NET/Core的Stream

    该文章综合了几本书的内容. 某咖啡店项目的解决方案 某咖啡店供应咖啡, 客户买咖啡的时候可以添加若干调味料, 最后要求算出总价钱. Beverage是所有咖啡饮料的抽象类, 里面的cost方法是抽象的 ...

  5. (转)Windows管道(Pipe)重定向stdout,stderr,stdin

    参考: http://qiusuoge.com/11496.html http://www.cnblogs.com/BoyXiao/archive/2011/01/01/1923828.html st ...

  6. windows named pipe 客户端 服务器

    可以实现多客户端对一服务端,服务端为客户端提供服务. 其实一服务端对应每一个client pipe都新建立了一个pipe.windows允许建立多个同名pipe 效果: 服务端代码: #define ...

  7. docker-compose up Windows named pipe error:(code: 2)

    执行docker-compose up启动项目时,报如下错误: ERRORERROR: Windows named pipe error: 膸碌脥艂艕艊藳禄碌藵脰赂露篓碌脛脦脛慕牛藝艁 (code: ...

  8. Windows进程间通信—命名管道

    命名管道是通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节.我们在不了解网络协议的情况下,也可以利用命名管道来实现进程间的通信.与Socket网络通信相比,命名管道不再需要编写身份验证的代码.将 ...

  9. windows配置xhprof,PHP性能分析工具

    本来以为配置这么一个工具不会费很大的力气,后面发现完全不是. 一.小插曲 早上显示电脑不能显示虚拟目录下的所有域名,但是能打开localhost,数据库连接也不行了.这个问题纠缠了我一个上午.对了还有 ...

随机推荐

  1. 1.部署虚拟环境安装linux系统

    第1章 部署虚拟环境安装linux系统 章节简述: 本章从零基础详细讲解了虚拟机软件与红帽Linux系统,完整演示了VM虚拟机的安装与配置过程,以及红帽RHEL 7系统的安装.配置过程和初始化方法.此 ...

  2. dev c++ 提示没有iostream.h文件

    dev c++ 提示没有iostream.h文件 解决办法路径没有打通最好是这样写:#include <iostream>using namespace std;int main(int ...

  3. ubuntu检测到系统错误解决方法

    解决方案: 1.打开终端,输入 sudo gedit /etc/default/apport 2.把里面的enabled=1改成enabled=0,保存

  4. google浏览器audits

    功能翻译 audits,审计 Audits help you identify and fix common problems that affect your site'sperformance,a ...

  5. 记账APP市场分析

    文/欧小慧(简书作者)原文链接:http://www.jianshu.com/p/281fcdce3baa著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 一.市场环境 1.理财记账类用 ...

  6. hihoCoder #1047 Random Tree

    题意 给出点数为 $n$($n \le 1000$)的完全图 $K_n$,带边权.随机出 $K_n$ 的一棵生成树 $T$.求 $T$ 上任意两点间距离的期望. 解法 固定两点 $u$.$v$($u ...

  7. P4513 小白逛公园 (线段树)

    题目链接 Solution 线段树是一门比较刁钻的手艺... 此题我们需要维护 \(4\) 个变量: \(amx\) 代表当前节点的最大值. \(lmx\) 代表当前节点以左端点为起点的区间最大值. ...

  8. d3 画简单的柱形图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 金鹰教程网 FLASH8.0(AS)视频教程(下载地址)自认为最好的一个Flash教程

    原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] 可以用迅雷新建批量任务下载,很方便的。 金鹰教程网 FLASH8.0教学视频 到目前(2008年7月29日21:2 ...

  10. mysql利用sql脚本插入数据中文乱码

    将其中的 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SE ...