我想知道这两个提示行中的哪一个在性能方面更好:
./function input > output.txt
./function input output.txt
现在,一些上下文,我的函数只使用 fprintf
来打印输出,例如:
fprintf(output," whatever");
那么,上面提到的备选方案中哪一个在性能方面表现更好?重定向标准输出还是直接在文件中打印?
最佳答案
这两种方法之间的区别仅在于哪个进程打开文件进行写入和关闭它。所以在运行程序时没有性能差异。五个(stdin、stdout、stderr、“input”和“output.txt”)文件描述符打开而不是只有四个(将输出写入 stdout 时)这一事实没有区别。
当然,为了让您的程序以完全相同的方式运行,无论是写入 stdout 还是写入文件,它都必须以行缓冲方式写入文件(写入 stdout 时默认情况下也是如此)。
如果你没有像这样 setvbuf(stream, (char *) NULL, _IOLBF, 0);
(取自 setvbuf()
的联机帮助页)您的程序将使用 block 缓冲,在大多数情况下,这比重定向到 stdout 更快。
因此,如果允许您的程序对其输出使用 block 缓冲,则./function input output.txt
会更快。 (但是关于你的问题的评论是有效的:一定要衡量真实的表现!)
关于c - 在 C 中有效地重定向输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13891670/