使用 cygwin 和 mingw 进行 I/O 重定向

使用 cygwin 和 mingw 进行 I/O 重定向

我用 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(),但是这样就不会向写入控制台的每个缓冲区添加额外的库调用。

相关内容