【IPC进程间通讯之二】管道Pipe

摘要:
IPC进程间通信+管道IPC(进程间通信。管道用于在进程之间共享数据。管道不仅可以用于本地进程间通信,还可以封装底层计算机网络实现。匿名管道只能用于父进程和子进程之间的通信,命名管道可以用于任意进程之间的通讯命名管道通信过程分为服务器和客户端。此功能用于服务器等待客户端连接到管道大道。
IPC进程间通信+管道Pipe
      
        IPC(Inter-Process Communication。进程间通信)。

        管道用于进程间共享数据,事实上质是共享内存。经常使用IPC之中的一个。

管道不仅能够用于本机进程间通信,还可实现跨网络进程间通信。如同Socket通信。管道相同封装计算机底层网络实现,提供一个良好的API接口。

       
       1.管道(Pipe)

       管道分为匿名管道和命名管道。
       匿名管道仅仅能用于父子进程间通信 ,不能跨网络通信,而且通信是单向。

       命名管道可用于随意进程间通信。支持跨网络通信,而且通信是双向。随意一段都能够接收和发送数据。

命名管道是学习的重点。

       命名管道通信进程分为服务端client,服务端创建Pipe,client通过管道名连接该Pipe之后。两方均可通过该Pipe发送和接收数据。
       
        2.邮槽命名 :
       本机上格式:\ServerNamePipe ame
       如:\.Pipemy_pipe

       3.基本API函数 :
创建命名管道:
        HANDLE    CreateNamedPipe(
                        LPCTSTR   lpName,                // 指向管道名称的指针
                        DWORD     dwOpenMode,       // 管道打开模式
                        DWORD     dwPipeMode,       // 管道模式
                        DWORD     nMaxInstances,     // 最大实例数
                        DWORD     nOutBufferSize,   // 输出缓存大小
                        DWORD     nInBufferSize,       // 输入缓存大小
                        DWORD    nDefaultTimeOut, // 超时设置
LPSECURITY_ATTRIBUTES lpSecurityAttributes   // 安全属性指针
);
        该函数用于server端创建命名管道。
等待client连接:
        BOOL  ConnectNamedPipe(
                     HANDLE    hNamedPipe,        //管道句柄
                     LPOVERLAPPED   lpOverlapped     //设为NULL
); 
        该函数用于server等待client连接到管道。

检查命名管道:
        BOOL  WaitNamedPipe(
                     LPCTSTR   lpNamedPipeName,  //管道名
                     DWORD     nTimeOut                  //超时
);
         该函数用于client检查是否存在管道Pipe。

打开命名管道:
        BOOL  CreateFile(
                     LPCTSTR   lpFileName,
                     DWORD     dwDesiredAccess,
                     DWORD     dwShareMode,
                     LPSECURITY_ATTRIBUTES   lpSecurityAttributes,
                     DWORD    dwCreationDisposition,
                     DWORD    dwFlagsAndAttributes,
                    HANDLE    hTemplateFile
 
);
         第一个參数:管道名指针。
         第二个參数:訪问模式。
         第三个參数:共享模式。
         第四个參数:安全属性指针。

         第五个參数:创建选项。
         第六个參数:文件属性。
         第七个參数:用于拷贝文件句柄。
         该函数用于打开一个管道。并返回管道句柄。
读取管道:       
        BOOL ReadFile(
                    
HANDLE    hFile,
                    LPVOID     lpBuffer,
                    DWORD    nNumberOfBytesToRead,
                    LPDOWRD    lpNumberOfBytesRead,
                    LPOVERLAPPED   lpOverlapped
);
        第一个參数:管道句柄。
        第二个參数:缓存地址。

        第三个參数:消息的长度。
        第四个參数:实际读取的长度。

        第五个參数:一般设置为NULL。
        该函数用于读取管道内数据。
写入管道:
        BOOL  WriteFile(
                     HANDLE    hFile,
                     LPCVOID   lpBuffer,
                     DWORD     nNumberOfBytesToWrite,
                     LPDWORD   lpNumberOfBytesWritten,
                     LPOVERLAPPED    lpOverlapped
);
         第一个參数:管道句柄。

         第二个參数:数据缓冲区指针。
         第三个參数:写入字节数。
         第四个參数:返回实际写入字节数。
         第五个參数:结构体指针。一般置NULL。

         该函数用于client向管道写入数据。

         4.牛刀小试 : 
         先在VC6.0中执行服务端程序。在执行client程序。
【IPC进程间通讯之二】管道Pipe第1张
         执行效果:
【IPC进程间通讯之二】管道Pipe第2张
server程序:
client程序:




免责声明:文章转载自《【IPC进程间通讯之二】管道Pipe》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇74HC595 8位移位寄存器的使用小结分享一个利用HTML5制作的海浪效果代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java多线程文件上传服务器

 描述: (1)jdk自带线程池见 JDK自带线程池配置 (2)此上传文件服务器中上传文件的后缀名通过第一段缓冲字符流传递,此缓冲字符流大小为1024,在文件接收端以1024接收、处理。 1、服务器代码如下(使用jdk自带线程池): 1 /** 2 * 服务器处理多线程问题 3 * 4 * 1.因为服务器是要很多人访问的,因此里面一定要用多...

ubuntu查看系统资源占用(内存,cpu和进程)

linux真是太强大了。 查看ubuntu的资源占用的命令为$: top top命令就可以查看内存,cpu和进程了,很方便 top: 主要参数 d:指定更新的间隔,以秒计算。 q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。 c:显示进程完整的路径与名称。 S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。 s:...

GatewayWorker与ThinkPHP等框架结合

使用GatewayWorker时开发者最关心的是如何与现有mvc框架(ThinkPHP Yii laravel等)整合,以下是官方推荐的整合方式。 见示意图: ## 总体原则 现有mvc框架项目与GatewayWorker独立部署互不干扰 所有的业务逻辑都由网站页面post/get到mvc框架中完成 GatewayWorker不接受客户端发来的数据,即G...

HDSF主要节点解说(二)工作原理

HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。 是依据google发表的论文翻版的。论文为GFS(Google File System)Google 文件系统(中文。英文)。 HDFS有非常多特点: ① 保存多个副本,且提供容错机制,副本丢失或宕机自己主动恢复。默认存3份。 ② 执行在便宜的机器上...

重定向Console输出到文本框

很多时候,我们需要捕获Console输出,然后在文本框等控件中显示。例如SnippetCompiler就实现了编译源代码并将结果在下面的ListView显示的功能。Console.SetOut(TextWriter)设置Console输出重定向,这样我们需要写一个TextWriter的派生类,这个类的构造函数我们传入要定向目标控件的引用,然后在 publ...

SpringCloudfeign的配置加载

     spring cloud feign我们使用 @FeignClient注解,其中有几个核心属性: @AliasFor("name") String value() default ""; @Deprecated String serviceId() default ""; /** * This will be used as the bea...