gpt4 book ai didi

c++ - 被管道弄糊涂了。 'cat -A' 似乎过滤掉了部分输出

转载 作者:行者123 更新时间:2023-11-30 05:21:19 24 4
gpt4 key购买 nike

我看到了这个。

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_exitmain 的末尾,而不是简单地返回退出代码。这是非常危险的,因为 quick_exit懒得清理执行环境。特别是,它不会刷新与 stdout 关联的缓冲区.

如果 stdout 就没问题了是行缓冲的,因为如果它连接到终端,它将在大多数系统上使用。但是如果它是完全缓冲的,就像它连接到管道时一样,那么输出可能会丢失,这就是您所看到的。

这不是您的代码中唯一有问题的编程实践,但我相信这是最直接的问题。

(顺便说一句,第一行是正确打印的,因为 std::cout << std:::endl; 显式刷新了 cout 缓冲区。不过,混合使用 c++ 和 c 输出函数也是一个坏主意。)

关于c++ - 被管道弄糊涂了。 'cat -A' 似乎过滤掉了部分输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com