我看到了这一点。
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。
答案 0 :(得分:1)
您在quick_exit
结束时调用main
,而不是简单地返回退出代码。这非常危险,因为quick_exit
无需清理执行环境。特别是,它不会刷新与stdout
关联的缓冲区。
如果stdout
是行缓冲的,那将不会有问题,因为如果它连接到终端,它将在大多数系统上。但如果它是完全缓冲的,如果它被连接到管道,那么输出可能会丢失,这就是你所看到的。
这不是代码中唯一可疑的编程实践,但我相信这是当前的问题。
(顺便说一下,第一行是正确打印的,因为std::cout << std:::endl;
显式刷新了cout
缓冲区。但是混合使用c ++和c输出函数也是一个坏主意。)
答案 1 :(得分:0)
当TonHospel
检测到其标准输出是终端时,它会将另一行(例如permanent=-5258461839360 (0.213000 s)
)写入标准错误。当标准输出是其他内容时,没有任何内容写入标准错误,例如管道或文件。