c - 在 C 中有效地重定向输出

标签 c bash io

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

  • ./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/

相关文章:

C 中的字符数组

c++ - 作为函数指针的静态方法

c - OpenOffice 断字算法 - 参数是什么意思?

java - Windows/Linux 框上的文件分隔符问题

c - 这个函数怎么会出现被零除的算术错误呢?

python从字符串中删除电话号码

linux - 如何在 bash 中自定义选择循环

linux - 带有 bash 的 Mongodb : Creating replica sets gets 'error command line: unknown option fork use --help for help'

java - 创建 BufferedReaders 列表

python - 使用python处理和创建外部软件的输入文件