gpt4 book ai didi

c - 通过管道输入/输出到进程

转载 作者:行者123 更新时间:2023-11-30 15:55:35 25 4
gpt4 key购买 nike

我在让管道正常工作时遇到一些困难。我有以下代码:

/* Set security attributes */
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;

if (CreatePipe(&Rread, &Rwrite, &sa, 0) == 0 || SetHandleInformation(Rread, HANDLE_FLAG_INHERIT, 0) == 0 || CreatePipe(&Wread, &Wwrite, &sa, 0) == 0 || SetHandleInformation(Wwrite, HANDLE_FLAG_INHERIT, 0) == 0)
{
/* Error */
}


/* Set process information */
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = Rwrite;
si.hStdError = Rwrite;


if (CreateProcess(NULL, argsCasted->cmd, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi) == 0)
{
/* Error */
}


for (;;)
{
PeekNamedPipe(Rread, NULL, 0, &a, NULL, NULL);

if (a > 0)
{
/* Write output somewhere... */
}

if (a == 0 && GetExitCodeProcess(pi.hProcess, &c) != 0 && c != STILL_ACTIVE) break;

Sleep(50);
}


/* CloseHandles... */

/* Free stuff... */

现在,当我添加 si.hStdInput = Wread; (以便我可以将输入发送到进程)时,PeekNamedPipe() 会阻塞。

我大大简化了代码,因为它是大型多线程应用程序的一部分,该应用程序太大而无法在此处发布。如果有人需要我提供更多详细信息来解决此问题,请在此处发布,我将添加所需的详细信息。

提前致谢乔里。

最佳答案

如果管道中没有数据可供读取,

PeekNamedPipe 将阻塞。您必须使用异步/非阻塞 I/O。

引用:asynchronous IO

关于c - 通过管道输入/输出到进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11984497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com