使用 "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 个字节。它非常非常慢,请增加缓冲区,并在每次读取调用时尽可能多地读取
我有一个程序可以做很多工作。我想将所有控制台打印记录到一个文件中。所以我在可执行文件中使用了 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 个字节。它非常非常慢,请增加缓冲区,并在每次读取调用时尽可能多地读取