在C中有效地重定向输出

时间:2012-12-15 11:15:00

标签: c bash io

我想知道这两个提示行中的哪一个在性能方面更好:

  • ./function input > output.txt
  • ./function input output.txt

现在,在某些上下文中,我的函数仅使用fprintf来打印输出,例如:

fprintf(output," whatever");

那么,上面提到的哪一种替代方案在性能方面会表现得更好?重定向stdout或直接在文件中打印?

1 个答案:

答案 0 :(得分:0)

两种方法之间的区别仅在于哪个进程打开文件进行写入并关闭它。因此在运行程序时没有性能差异。五个(stdin,stdout,stderr,“input”和“output.txt”)文件描述符打开而不是只有四个(将输出写入stdout时)没有任何区别。

当然,无论是写入stdout还是文件,程序都会以完全相同的方式运行,它必须写入文件也是行缓冲的(在写入stdout时默认情况下也是这样)。

如果你没有在setvbuf()这样的文件结构上调用fopen() setvbuf(stream, (char *) NULL, _IOLBF, 0);(从setvbuf()的联机帮助页中获取),你的程序将使用块缓冲,在大多数情况下,这将比重定向到stdout更快。

因此,如果允许您的程序对其输出使用块缓冲,则./function input output.txt将更快。 (但是关于你的问题的评论是有效的:衡量真实的表现!)