使用 "tee" 会使标准输出变慢

Using "tee" makes the stdout slow

我有一个程序可以做很多工作。我想将所有控制台打印记录到一个文件中。所以我在可执行文件中使用了 T 恤。

我实现了一个 tee,它从 stdin 读取并写入 stdout 和一个文件。

执行 run.sh | tee loglink

但我看到的是,我的程序登录时间过去需要 3 分钟,现在需要 6 分钟。

延迟的原因是什么?我评论了我的 T 恤的文件操作部分,仍然看到相同的延迟。是管道导致了这个问题吗?

添加代码,

char ch;
fd = open(file_name, O_WRONLY | O_APPEND, 0664);
while(read(STDIN_FILENO, &ch, 1) > 0)
{
    write(STDOUT_FILENO, &ch, 1); //write to console
    fflush(stdout);
    write(fd, &ch, 1); //write to the file
}
read(STDIN_FILENO, &ch, 1)

您每次读取调用仅读取 1 个字节。它非常非常慢,请增加缓冲区,并在每次读取调用时尽可能多地读取