【IPC第二个进程间通信】管道Pipe

it2025-07-19  13

IPC进程间通信+管道Pipe

               IPC(Inter-Process Communication,进程间通信)。         管道用于进程间共享数据,事实上质是共享内存。经常使用IPC之中的一个。管道不仅能够用于本机进程间通信,还可实现跨网络进程间通信,如同Socket通信,管道相同封装计算机底层网络实现,提供一个良好的API接口。                1.管道(Pipe)        管道分为匿名管道和命名管道。        匿名管道仅仅能用于父子进程间通信 ,不能跨网络通信,而且通信是单向。        命名管道可用于随意进程间通信,支持跨网络通信,而且通信是双向,随意一段都能够接收和发送数据。命名管道是学习的重点。        命名管道通信进程分为服务端client。服务端创建Pipe,client通过管道名连接该Pipe之后,两方均可通过该Pipe发送和接收数据。                 2.邮槽命名  :        本机上格式:\\ServerName\Pipe\name        如:\\.\Pipe\my_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程序。

          执行效果: server程序: client程序:

版权声明:本文博主原创文章。博客,未经同意不得转载。

转载于:https://www.cnblogs.com/bhlsheji/p/4913307.html

最新回复(0)