我正在尝试编译原始 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/