作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
void WriteToPipe(void)
// Read from a file and write its contents to the pipe for the child's STDIN.
// Stop when there is no more data.
{
DWORD dwRead, dwWritten;
CHAR chBuf[BUFSIZE];
BOOL bSuccess = FALSE;
char * name = malloc(100);
fgets(name, 100, stdin);
bSuccess = WriteFile(g_hChildStd_IN_Wr, name, 10, &dwWritten, NULL);
if (!bSuccess)
ErrorExit("");
}
void ReadFromPipe(void)
// Read output from the child process's pipe for STDOUT
// and write to the parent process's pipe for STDOUT.
// Stop when there is no more data.
{
DWORD dwRead, dwWritten;
CHAR chBuf[BUFSIZE];
BOOL bSuccess = FALSE;
HANDLE hParentStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
bSuccess = ReadFile(g_hChildStd_OUT_Rd, chBuf, BUFSIZE, &dwRead, NULL);
if (!bSuccess || dwRead == 0)
return 100;
bSuccess = WriteFile(hParentStdOut, chBuf,
dwRead, &dwWritten, NULL);
if (!bSuccess)
return 101;
}
主要(未全):
while (1)
{
Sleep(500);
ReadFromPipe();
WriteToPipe();
}
我正在尝试将 cmd 作为子进程打开,并将父输入传递给子 STDIN 流,而不是打印子进程的 STDOUT。
如您所见,它在第一次运行时有效,但后来我得到了这个“更多?”从子进程(cmd)返回,然后卡住等待输出。
为什么我得到这个“更多”?回来了吗?
“更多”是什么?
最佳答案
我发现父输入重定向的唯一方法是创建一个额外的线程。常见的算法是:
hPipeRead
, hPipeWrite
)hPipeRead
GetStdHandle(STD_INPUT_HANDLE)
并立即将读取缓冲区写入 hPipeWrite
的父进程中创建新线程。当 stdInput 结束时,线程完成。Microsoft support article中描述了这种方式.
关于c++ - 如何将 STDIN 传递给子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23490030/
我是一名优秀的程序员,十分优秀!