⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 17.2.1 匿名管道及基础知识.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
17.2 匿名 管道


17.2.1 基础知识



匿名管道是一个未命名的、单向管道,通常用来在一个父进程和一个子进程之间传输

。匿名管道只能实现本地机器上两个进程间的通信,而不能实现跨网络的通信。

为了创建匿名管道,需要调用CreatePipe函数,该函数的原型声明如下所示: 
BOOL CreatePipe( 
PHANDLE hReadPipe , 
PHANDLE hWri匕ePipe, 
LPSECURITY_ATTRIBUTES lpPipeAttributes , 
DWORD nSize 

CreatePipe函数将创建一个匿名管道,返回该匿名管道的读写句柄。该函数有四个参数,其含义分别如下所述。 
. hReadPipe和hWritePipe
这两个参数都是out类型,即作为返回值来便用。前者返回管道的读取句柄,后者接收管道的写入句柄。也就是说,在程序中需要定义两个句柄变量,将它们的地址分别传递给这两个参数,然后CreatePipe函数将通过这两个参数返回创建的匿名管道的读写句柄。 
. lpPipeAtttibutes 
一个指向SECURITY .πRffiUTES结构体的指针,检测返回的句柄是否能被子进程继承。如果此参数为 NULL,则句柄不能被继承。在前面的章节中,凡是需要 SECURITY ATTRIBUTES结构体指针的地方,我们传递的都是NULL值,让系统为创建的对象赋予默认的安全描述符,而函数所返回的句柄将不能被子进程所继承。但在本章匿名管道的例子中,不能再为此参数传递NULL值了,因为匿名管道只能在父子进程之间进行通信。子进程如果想要想获得匿名管道的句柄,只能从父进程继承而来。当一个子进程从其父进程继承了匿名管道的句柄后,这两个进程就可以通过该句柄进行通信了。所以,在本章匿名管道的例子中,必须构造一个SECURIτ'Yj'>;τTRffiUTES结构体变量,该结构
体的定义如下所示: 
typedef struct _SECURITY_ATTRIBUTES { 
DWORD nLength; 
LPVOID lpSecurityDescriptor; 
BOOL bInheritHandle; 
} SECURITY_ATTRIBUTES , *PSECURITY_ATTRIBUTES; 
SECURITY ATTRffiUTES结构体有三个成员,第一个成员(nLength)指定该结构体的大小:第二个成员 (lpSecurityDescriptor)是一个指向安全描述符的指针,在本章匿名管
道的例子中,可以给这个成员传递 NULL值,让系统为创建的匿名管道赋予默认的安全描
述符:第三个成员 ( blnheritHandle )很关键,该成员指定所返回的句柄是否能被一个新的
进程所继承,如果此成员为 TRUE,那么返回的句柄能够被新进程继承。在本章匿名管道
的例子中,需要将此成员设置为 TRUE,让子进程可以继承父进程创建的匿名管道的读写句柄。 
. nSize 
指定管道的缓冲区大小,该大小仅仅是一个建议值,系统将使用这个值来计算一个适当的缓冲区大小。如果此参数是 0,系统则使用默认的缓冲区大小。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -