使用“tee”使stdout变慢

时间:2015-12-31 06:07:37

标签: c linux tee

我有一个做很多工作的程序。我想将所有控制台打印记录到文件中。所以我用我的可执行文件发球。

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

exec run.sh | tee loglink

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

这种延迟的原因是什么?我评论了我的发球台的文件操作部分,仍然看到同样的延迟。它是导致此问题的管道吗?

添加代码,

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
}

1 个答案:

答案 0 :(得分:1)

read(STDIN_FILENO, &ch, 1)

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