【发布时间】:2011-10-21 19:04:27
【问题描述】:
服务: 在命名管道中创建 std out,err,in。将它们附加到它创建的进程。
HANDLE hStdOut = CreateNamedPipe(szStdOutPipeName,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE,
1,
100,
100,
15000,
pSa);
yStartupInfo.hStdOutput = hStdOut;
CreateProcessAsUserW( ..., yStartupInfo, ... );
这部分有效。创建的进程的输出被重定向到管道中。
客户: 连接到命名管道,成功。检查是否有要读取的字节(此时字节被推入管道!)。然后从管道中读取字节。
hStdOutPide = CreateFileW(szPipeNameStdOut,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL );
PeekNamedPipe(hStdOutPide,
szBuffer,
kunBufferSize,
&ulBytesRead,
&ulBytesAvailable,
&ulRemainingBytes);
if( ulBytesAvailable > 0)
ReadFile(hStdOutPide, szBuffer, 1000, &ulBytesRead, NULL)
我已经删除了确保句柄有效并且进程正在运行等的周围代码。
Peek 显示ulRemainingBytes 是始终 0。有谁看到我的错误可能在哪里?我一直试图让它工作一段时间,并且不知道任何东西的正确标志是什么。如果您需要更多信息,请询问!
CreateNamesPipe 中的安全属性是从方法生成的。它在代码中的许多其他地方都使用过,所以我认为问题不存在。
谢谢。
【问题讨论】:
标签: c++ winapi named-pipes