我有一个做很多工作的程序。我想将所有控制台打印记录到文件中。所以我用我的可执行文件发球。
我实现了一个从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
}
答案 0 :(得分:1)
read(STDIN_FILENO, &ch, 1)
每次读取调用只读取1个字节。它非常慢,请增加缓冲区,并在每次阅读时尽可能多地阅读