-
2006-11-19
第四章 命名管道 - [多线程程序设计]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://xingzhesun.blogbus.com/logs/3866174.html
第四章 命名管道
是一种简单的进程之间通信的机制。
4.1实施细节
命名管道是围绕Windows文件系统设计的一种技术,采用命名管道文件系统(Named Pipe File System NPFS)接口。
它依赖MSNP重定向器再网上进行命名管道数据的发送和接收。
4.1.1命名规范
\\server\Pipe\[path]name
4.1.2字节模式和消息模式
字节模式:在任何一个特定的时间段内,客户服务器不知道有多少字节从管道读入和写入。
消息模式:每次在管道发送一条消息后,必须作为一条完整的消息读入。
4.1.3应用程序的编译
winbase.h+kernel32.lib
4.1.4错误代码
winerror.h
4.2客户机服务器基础
4.2.1服务器细节
1)CreateNamedPipe
2)ConnectNamedPipe监听客户机的连接
3)ReadFile WriteFile
4)DisconnectNamedPipe()
5)CloseHandle()void main()
{
HANDLE ThreadHandle;
int i;
DOWRD ThreadId;
for(i=0; i<5;i++)
{
if((ThreadHandle = CreateThread(NULL, 0, PipeInstanceProc,
NULL, 0, &ThreadId)) == NULL)
{
return;
}
CloseHandle(ThreadHandle)
_getch();
}
}DWORD WINAPI PipeInstanceProc(LPVOID lpParameter)
{
HANDLE PipeHandle;
DWORD BytesRead;
DWORD BytesWrite;
CHAR Buffer[256];if((PipeHandle = CreateNamedPiped("\\\\.\\PIPE\\jim",
PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE|PIPE_READMODE_BYTE,
NUM_PIPES,0,0,1000, NULL))==INVALID_HANDLE_VALUE)
{return 0;}
while(1)
{
if(ConnectNamedPipe(PipeHandle, NULL)==0)
{ break;}
while(ReadFile(PipeHandle, Buffer, sizeof(Buffer),&BytesRead,NULL)>0)
{
}
if(DisconnectNamedPipe(PipeHandle)==0)
{return;}
CloseHandle(PipeHandle);
}
}
2.重叠IO
允许Win32API函数在发出IO之后以一部方式工作。
4.2.3客户机细节
1)WaitNamedPipe
2)CreateFile
3)WriteFile&ReadFile
4)CloseHanlde
4.3OtherAPI
CallNamedPipe
TransactNamedPipe
SetNamedPipeHandleState
GetNamedPipeHandleState随机文章:
near指针和far指针 2008-01-13第9章 套接字选项和IO控制命令 2006-11-28Windows完成端口编程 2006-11-278.2.2 WSAAsyncSelect 2006-11-27第五章 网络原理和协议 2006-11-20
收藏到:Del.icio.us








