我看到了这个。
cat test.hs |./TonHospel
25 x 25 matrix, 8 threads
permanent=-5258461839360 (0.213000 s)
user@user-desktop:~/python$ cat test.hs |./TonHospel |cat -A
25 x 25 matrix, 8 threads$
出于某种原因,cat -A
过滤掉了部分输出。我猜它可能以某种方式与 stderr 和 stdout 有关,所以我尝试将两者都通过管道传输到 stdout。这没有帮助。
user@user-desktop:~/python$ cat test.hs |./TonHospel 2>&1 |cat -A
25 x 25 matrix, 8 threads$
最后我只是随机尝试了这个。
user@user-desktop:~/python$ cat test.hs |./TonHospel 3>&1 1>&2 2>&3 |cat -A
25 x 25 matrix, 8 threads
permanent=-5258461839360 (0.236000 s)
这是怎么回事? C++ 源代码位于 https://bpaste.net/show/ce5ca8643ba5。 .
最佳答案
您调用 quick_exit
在 main
的末尾,而不是简单地返回退出代码。这是非常危险的,因为 quick_exit
懒得清理执行环境。特别是,它不会刷新与 stdout
关联的缓冲区.
如果 stdout
就没问题了是行缓冲的,因为如果它连接到终端,它将在大多数系统上使用。但是如果它是完全缓冲的,就像它连接到管道时一样,那么输出可能会丢失,这就是您所看到的。
这不是您的代码中唯一有问题的编程实践,但我相信这是最直接的问题。
(顺便说一句,第一行是正确打印的,因为 std::cout << std:::endl;
显式刷新了 cout
缓冲区。不过,混合使用 c++ 和 c 输出函数也是一个坏主意。)
关于c++ - 被管道弄糊涂了。 'cat -A' 似乎过滤掉了部分输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207079/