day6 – 管道和进程遍历

本文介绍了Linux系统中创建匿名管道`createpipe`的参数和返回值,以及如何获取标准设备句柄`getstdhandle`的使用。同时讲解了`peeknamepipe`函数在不移除数据的情况下检查管道中可用信息的方法。这些概念和函数是进程间通信的重要组成部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

createpipe

创建一个匿名管道,并将句柄返回到该管道的读取和写入端。

BOOL CreatePipe(
  PHANDLE               hReadPipe,
  PHANDLE               hWritePipe,
  LPSECURITY_ATTRIBUTES lpPipeAttributes,
  DWORD                 nSize
);

参数

  • hReadPipe

指向变量的指针,该变量接收管道的读取句柄。

  • hWritePipe

指向变量的指针,该变量接收管道的写句柄。

  • lpPipeAttributes

指向SECURITY_ATTRIBUTES结构的指针,该 结构确定子进程是否可以继承返回的句柄。如果lpPipeAttributes为NULL,则不能继承该句柄。

结构的lpSecurityDescriptor成员为新管道指定安全描述符。如果lpPipeAttributes为NULL,则管道将获取默认的安全描述符。管道的默认安全描述符中的ACL来自创建者的主令牌或模拟令牌。

  • nSize

管道缓冲区的大小,以字节为单位。大小只是一个建议;系统使用该值来计算适当的缓冲机制。如果此参数为零,则系统使用默认缓冲区大小。

返回值

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零。要获取扩展的错误信息,请调用 GetLastError。

getstdhandle

检索指定标准设备(标准输入,标准输出或标准错误)的句柄。

HANDLE WINAPI GetStdHandle(
  _In_ DWORD nStdHandle
);

参数

nStdHandle [输入]

标准设备。此参数可以是以下值之一。

参数

价值意义
STD_INPUT_HANDLE(DWORD)-10标准输入设备。最初,这是控制台输入缓冲区CONIN$
STD_OUTPUT_HANDLE(DWORD)-11标准输出设备。最初,这是活动的控制台屏幕缓冲区CONOUT$
STD_ERROR_HANDLE(DWORD)-12标准错误设备。最初,这是活动的控制台屏幕缓冲区CONOUT$

返回值

如果函数成功,则返回值是指定设备的句柄,或者是先前对SetStdHandle的调用设置的重定向句柄。该句柄具有GENERIC_READGENERIC_WRITE访问权限,除非应用程序使用SetStdHandle设置访问权限较小的标准句柄。

如果函数失败,则返回值为INVALID_HANDLE_VALUE。要获取扩展的错误信息,请调用GetLastError

如果应用程序没有关联的标准句柄(例如,在交互式桌面上运行的服务)并且尚未重定向它们,则返回值为NULL

peeknamepipe

将数据从命名管道或匿名管道复制到缓冲区中,而不将其从管道中删除。它还返回有关管道中数据的信息。

BOOL PeekNamedPipe(
  HANDLE  hNamedPipe,
  LPVOID  lpBuffer,
  DWORD   nBufferSize,
  LPDWORD lpBytesRead,
  LPDWORD lpTotalBytesAvail,
  LPDWORD lpBytesLeftThisMessage
);

参数

  • hNamedPipe

管道的手柄。此参数可以是CreateNamedPipeCreateFile函数返回的命名管道实例的句柄 ,也可以是CreatePipe函数返回的匿名管道的读取端的句柄 。句柄必须具有对管道的GENERIC_READ访问权限。

  • lpBuffer

指向缓冲区的指针,该缓冲区接收从管道读取的数据。如果不读取任何数据,则此参数可以为NULL

  • nBufferSize

lpBuffer参数指定的缓冲区大小,以字节为单位。如果lpBufferNULL,则忽略此参数。

  • lpBytesRead

指向变量的指针,该变量接收从管道读取的字节数。如果不读取任何数据,则此参数可以为NULL

  • lpTotalBytesAvail

指向变量的指针,该变量接收可从管道读取的总字节数。如果不读取任何数据,则此参数可以为NULL

  • lpBytesLeftThisMessage

指向变量的指针,该变量接收此消息中剩余的字节数。对于字节类型的命名管道或匿名管道,此参数将为零。如果不读取任何数据,则此参数可以为NULL

返回值

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零。要获取扩展的错误信息,请调用 GetLastError

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值