C 程序拒绝管道?

标签 c gcc fortran pipe adventure

我正在尝试编译原始 Crowther/Woods FORTRAN Colossal Cave Adventure 的 1991 C 端口。代码一团糟,但是在更改了其中的某些部分后,它可以正确编译并运行。

问题是,当我尝试将其输出通过管道传输到另一个程序或文件时,什么也没有显示。 ./adventure 工作正常,但是 ./adventure | cat 不打印任何内容。查找对 fstat 的调用没有结果。

程序是否有其他方式可以检测管道并进入静默模式?即使添加 printf("Hello World"); 作为 main 函数的第一行也不会导致通过 cat 显示任何内容。

编辑:我正在使用 Jim Gillogly 的版本,但我从中获取源代码的链接已经腐烂。我会找到它的另一个下载链接。

最佳答案

正如现有评论所说,stdout 可能是 block 缓冲的,因为它不再向终端打开。尝试添加调用:

setvbuf(stdout, NULL, _IOLBF, 0);

程序开始处的某个位置。这会将 stdout 更改为行缓冲模式,一旦程序写入换行符,就会刷新输出。

关于C 程序拒绝管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21338961/

相关文章:

python - python setup.py 的编译器选项错误

fortran - 我声明了一个字符变量,但被告知我选择的符号不能有类型,我尝试过其他符号,但得到相同的错误

c++ - 编译混合的 GNU Fortran/C++ MPI 共享库

java - Android 语音调用桌面

c - ANSI C - 如何逐字读取标准输入?

c - #if定义中 '+'的功能?

c - C 中的 Posix 正则表达式

c++ - C+ +'s "inline"- 对 GCC 和 Clang/LLVM 的提示有多强?

assembly - 有什么方法可以判断变量是否被优化了?

字符/数字的乘法可以提高性能吗?