(高效地)将相同数据写入C中的多个文件

时间:2017-05-10 07:35:17

标签: c multithreading file io

我遇到的情况是我必须将一些字符串写入多个文件。一个直接的解决方案是简单地遍历每个文件,将相同的数据分别写入每个文件。如果想要同时向多个文件流写入相同的数据,他们将如何有效地实现这一目标?虽然这种情况是假设的,但一个示例可能是 - 如果有人想要同时写入FILE*stdout流:

FILE* streams[] = { /* some file streams */ };

/* is there a more efficient or elegant approach? */
int i;
for (i = 0; i < sizeof(streams); i++) 
    fputs(/* data */, streams[i]);

虽然此示例显示仅写入2个目标流,但潜在的解决方案应该能够写入多达8个文件流。为了实现这一点,是否可以链接文件,使它们指向同一位置?如果没有实际的镜像文件写入方法,如果可以将文件写入操作卸载到不同的线程上,请不要发布。

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

如果想要同时向多个文件流写入相同的数据,他们将如何有效地实现这一目标?

我猜循环是唯一的选择。

  

为了实现这一目标,是否可以链接文件以使它们指向同一位置?

如果您的N个文件需要相同,请确保您只需编写一个文件并为此文件建立硬链接。请注意,并非所有文件系统都支持硬链接,并且对其中一个文件的任何更改都会将所有文件更改为一个,因为它基本上是相同的文件:

ln orig_file copy1
  

可以将文件写入操作卸载到不同的线程

当然,线程有助于提高性能,但是你的几行程序将会变得更长。尝试增加缓冲区下面的内容:

man setvbuf