管道(Pipe)/createPipe
2024-07-25 21:43:39 222人阅读
BOOL CreatePipe(PHANDLE hReadPipe, // 指向读句柄的指针
PHANDLE hWritePipe, // 指向写句柄的指针
LPSECURITY_ATTRIBUTES lpPipeAttributes, // 指向安全属性的指针
DWORD nSize // 管道大小);
管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道server,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,还有一进程就能够从管道的还有一端将其读取出来。匿名管道(Anonymous Pipes)是在父进程和子进程间单向数据传输的一种未命名的管道,仅仅能在本地计算机中使用,而不可用于网络间的通信。
管道server将lpPipeAttributes 指向的SECURITY_ATTRIBUTES数据结构的数据成员bInheritHandle设置为TRUE,那么CreatePipe()创建的管道读、写句柄将会被继承
父进程能够调用进程创建函数CreateProcess()生成子进程。假设父进程要发送数据到子进程,父进程可调用WriteFile()将数据写入到管道(传递管道写句柄给函数),子进程则调用GetStdHandle()取得管道的读句柄,将该句柄传入ReadFile()后从管道读取数据。
假设是父进程从子进程读取数据,那么由子进程调用GetStdHandle()取得管道的写入句柄,并调用WriteFile()将数据写入到管道。然后,父进程调用ReadFile()从管道读取出数据(传递管道读句柄给函数)。
在用WriteFile()函数向管道写入数据时,仅仅有在向管道写完指定字节的数据后或是在有发生错误时函数才会返回。如管道缓冲已满而数据还没有写完,WriteFile()将要等到还有一进程对管道中数据读取以释放出很多其它可用空间后才可以返回。管道server在调用CreatePipe()创建管道时以參数nSize对管道的缓冲大小作了设定。
匿名管道并不支持异步读、写操作,这也就意味着不能在匿名管道中使用ReadFileEx()和WriteFileEx(),并且ReadFile()和WriteFile()中的lpOverLapped參数也将被忽略。匿名管道将在读、写句柄都被关闭后退出,也能够在进程中调用CloseHandle()函数来关闭此句柄。
管道(Pipe)/createPipe
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉:
投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。