我用 C 编写了一个程序,并使用 MinGW 对其进行了编译。当我尝试在 Cygwin 中运行该程序时,它似乎运行正常(即打印正确的输出等)。
但是,我尝试将输出通过管道传输到程序,以便解析程序输出中的信息。但是,管道似乎不起作用,因为我没有将任何输入输入到第二个程序中。
我已使用以下命令确认了这一点:
该命令似乎工作正常:
./prog
执行此命令不会返回任何内容:
./prog | cat
此命令验证第一个:
./prog | wc
返回:
0 0 0
我知道该脚本(包括来自程序的管道)在全 Linux 环境中运行良好。
有人知道为什么管道在 Cygwin 中不起作用吗?谢谢!
答案1
这很可能与 stdio 缓冲有关,正如之前在评论部分中指出和解释的那样。在我的 MinGW 项目中,我经常使用以下构造:
#定义 disable_stdout_buffering() 做 { \ setvbuf(stdout,NULL,_IONBF,0); } while(0) int main(int argc, char *argv[]) { 禁用_stdout_buffering(); /* 您的代码 */ 退出(EXIT_SUCCESS); }
当然,您也可以在预处理器宏中或在将数据输出到标准输出时添加调用fflush()
,但是这样就不会向写入控制台的每个缓冲区添加额外的库调用。