【问题标题】:Efficient way to write same data to two files [closed]将相同数据写入两个文件的有效方法[关闭]
【发布时间】:2018-03-24 06:55:04
【问题描述】:

只是想知道,在 linux 和 C/C++ 上,将相同数据写入两个文件的最有效方法是什么。

例如,这是最简单的方法。

while(1) {

    ... getting data from somewhere ....

    write(fd1, data, datalen);
    write(fd2, data, datalen);
}

但是,缺点是内核需要复制两次data,即使数据相同。

有什么想法吗?

【问题讨论】:

  • 没有 C/C++。选择您正在使用的一种语言。
  • 听起来像premature optimization。您是否有任何证据证明这是您代码中的相关瓶颈?我不这么认为。答案很大程度上取决于操作系统、文件系统及其内部工作原理,只要坚持显而易见的解决方案即可。旁注:你可能会在 C++ 中做不同的事情,所以不要双标记语言......
  • @yumoji,你为什么还要复制数据写入?除了看起来像 Felix 提到的过早优化之外,它也确实闻起来像 X/Y problem
  • 只写入一个文件。完成后将其复制到第二个。
  • 如果需要在两个不同的位置写入数据,内核如何写入数据两次

标签: c++ c linux file posix


【解决方案1】:

将相同数据写入两个文件的最有效方法是什么

  1. 仅将数据写入一个文件。
  2. 将该文件复制到另一个文件。使用操作系统调用来有效地执行此操作 (Copy a file in a sane, safe and efficient way)。

第 2 步的另一种方法是创建硬链接(检查 link())。


但是,请注意不要成为过早优化的受害者。如果这不是您程序中的瓶颈,那么只需使用简单易读的方法即可。

【讨论】:

  • 或创建一个硬链接。但是没有更多的操作规范,很难判断是否适合他的场景。
  • “将相同的数据写入两个文件”并不意味着文件最后会有相同的内容。
  • 我明白你的观点@Jean-BaptisteYunès,但 OP 给了我这种印象。让我们看看他会对我的回答说些什么。
  • @yumoji sendfile() 在 linux 上的表现如何(不可移植性除外)?如果有什么令人失望的地方,那就是问题的质量——如果你有“特殊需求”,你应该解释它们,这样你就能得到有用的建议。
  • @yumoji 我觉得我回答了你的问题。你问怎么做,我建议我的方法。过早的优化评论只是一个旁注。
猜你喜欢
  • 2012-08-06
  • 2017-10-08
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多