[英]Why can't I get the output of a C++ program using Process in C#?
我有一个C ++程序,它使用wprintf_s
函数将结果打印到命令行。 但是当我在C#中使用Process
来读取程序的输出时,我无法得到它的任何说法。 但是当我在wprintf_s
语句之后添加了一个fflush(stdout)
,我终于可以在我的C#程序中读取标准输出了。
我用来启动进度的代码是:
var proc = new Process {
StartInfo = new ProcessStartInfo {
FileName = "FILENAME",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
proc.Start();
StringCollection values = new StringCollection();
proc.OutputDataReceived += (s, args) => {
lock (values) {
values.Add(args.Data);
}
};
proc.BeginOutputReadLine();
proc.WaitForExit();
谁能告诉我为什么fflush(stdout)
会起作用?
输出在C ++进程中缓冲,并且将保持不变,直到缓冲区已满或刷新为止,例如通过调用fflush()
,关闭流或其他依赖于操作系统的原因。
fflush()
只是将输出缓冲区中的任何数据写入流中。
如果您不想显式调用fflush()
,可以考虑通过使用第二个参数的NULL指针调用setbuf()
来在输出流上设置unbuffered模式:
#include <stdio.h>
#include <unistd.h>
int main()
{
setbuf(stdout, (char *)NULL);
while (1)
{
fputs("hi there\n", stdout);
sleep(1);
}
}
现在输出将立即出现。
请注意,如果stdout
是终端,则不需要setbuf(f, NULL)
,因为这是终端设备的默认行为。 如果stdout
是一个管道,那么setbuf(f, NULL)
将使它无缓冲。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.