windows 进程通讯之管道篇
来源:互联网 发布:linux php源码目录 编辑:程序博客网 时间:2024/05/16 14:37
管道介绍
管道是一段被进程用来通讯的共享内存。创建pipe的进程称为服务端,连接到一个管道的进程叫做客户端。一个进程向管道中写入信息,接着另外一个进程读出其中数据。 下面介绍怎样创建,管理和使用管道。关于管道
有命名和匿名两种管道,相比之下匿名管道所需开销较小。这里用管道这个名词表明它是一个信息通道,概念上来说,一个管道连接两端。单向管道允许一端写另一段读,双向管道允许一个进程既可以读又可以向管道写数据。
匿名管道
匿名管道是个没有名字的单向管道,用来在父进程和子进程间传输数据。匿名管道总是在本机使用的,不可以用在网络上进行通讯。
winodws NT/2000 以后的系统:匿名管道通过使用唯一名字的命名管道来实现。因此,你可以将匿名管道的句柄作为参数传递给需要命名管道句柄的函数。
命名管道
命名管道是一个有名字,单向或者双向的,用在服务端和一个或多个客户端进行通讯。一个命名管道的所有实例共享同样的管道名,但是每个实例都有各自的缓存和句柄,作为一个隔离的通道,让客户端-服务器端进行通讯,这些实例允许客户端同时使用相同名字的管道。
任何进程可以访问命名管道,需要进行安全检查,使得管道为相关或者不相关进程通讯提供了一种简单的方式。命名管道可以用在同一台计算机或者网络计算机之间的进程间通讯。
任何进程既可以作为服务端又可作为客户端,使得段对段通讯成为可能。这里服务端的意思是创建了一个命名管道的进程,客户端是连接到命名管道实例的进程。
管道的使用
相关函数.
Function Description CallNamedPipeConnects to a message-type pipe, writes to and reads from the pipe, and then closes the pipe.ConnectNamedPipeEnables a named pipe server process to wait for a client process to connect to an instance of a named pipe.CreateNamedPipeCreates an instance of a named pipe and returns a handle for subsequent pipe operations.CreatePipeCreates an anonymous pipe.DisconnectNamedPipeDisconnects the server end of a named pipe instance from a client process.GetNamedPipeHandleStateRetrieves information about a specified named pipe.GetNamedPipeInfoRetrieves information about the specified named pipe.PeekNamedPipeCopies data from a named or anonymous pipe into a buffer without removing it from the pipe.SetNamedPipeHandleStateSets the read mode and the blocking mode of the specified named pipe.TransactNamedPipeCombines the functions that write a message to and read a message from the specified named pipe into a single network operation.WaitNamedPipeWaits until either a time-out interval elapses or an instance of the specified named pipe is available for a connection.
1.创建管道(server)
hPipe = CreateNamedPipe(
"////.//pipe//mynamedpipe", // pipe name
PIPE_ACCESS_DUPLEX, // read/write access
PIPE_TYPE_MESSAGE | // message type pipe
PIPE_READMODE_MESSAGE | // message-read mode
PIPE_WAIT, // blocking mode
PIPE_UNLIMITED_INSTANCES, // max. instances
BUFSIZE, // output buffer size
BUFSIZE, // input buffer size
PIPE_TIMEOUT, // client time-out
NULL); // no security attribute
2.等待连接(server)
fConnected = ConnectNamedPipe(hPipe, NULL) ?
TRUE : (GetLastError() == ERROR_PIPE_CONNECTED);
3.打开管道(client)
hPipe=CreateFile("////.//pipe//mynamedpipe", //pipename
GENERIC_READ | GENERIC_WRITE, //desired access
0, //share mode
NULL, //security
OPEN_EXISTING,
0,
NULL);
4.等待管道可用(client)
WaitNamedPipe("////.//pipe//mynamedpipe", //pipe name
20000) //timeout
3.从管道读取数据
// Read client requests from the pipe.
fSuccess = ReadFile(
hPipe, // handle to pipe
chRequest, // buffer to receive data
BUFSIZE, // size of buffer
&cbBytesRead, // number of bytes read
NULL); // not overlapped I/O
4. 向管道写数据
fSuccess = WriteFile(
hPipe, // pipe handle
buf, // message
strlen(buf) + 1, // message length
&cbWritten, // bytes written
NULL); // not overlapped
- windows 进程通讯之管道篇
- 进程间的通讯之有名管道
- 进程之间的通讯之管道
- 进程间通讯--管道
- 进程间通讯:管道
- 进程间通讯--管道
- Windows上C++使用命名管道进行进程间通讯
- Windows系统编程之进程间通信-管道篇
- Linux 进程间通讯之有名管道方式
- 进程间通讯(一)IPC之管道FIFO
- Linux进程间通讯方式之管道pipe
- 【IPC进程间通讯之二】管道Pipe
- Linux 进程间通讯之有名管道方式
- Windows进程通信方式之匿名管道
- Windows进程间通信之命名管道
- Windows进程间通信之命名管道
- windows 进程通信之管道详解 :
- 父子进程通过管道通讯------命名管道
- 在Eclipse插件开发中, 实现标准的Search功能
- strlen, sizeof
- servlet-api基本类和接口介绍
- .htm .html文件图标显示异常的解决办法
- 【java】:对属性文件的读写操作,中文字符解决方案
- windows 进程通讯之管道篇
- Eclipse中的自动换行
- 重叠I/O模型(概念)
- LINUX 下异常信号
- 基于 C8051F 的智能测量系统
- 深入剖析C++继承,多态以及隐藏(二)。(纯虚函数以及重写与隐藏)
- isalnum() 函数
- Oracle
- eclipse 插件开发 实现控制台管理