我遇到的情况是我必须将一些字符串写入多个文件。一个直接的解决方案是简单地遍历每个文件,将相同的数据分别写入每个文件。如果想要同时向多个文件流写入相同的数据,他们将如何有效地实现这一目标?虽然这种情况是假设的,但一个示例可能是 - 如果有人想要同时写入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个文件流。为了实现这一点,是否可以链接文件,使它们指向同一位置?如果没有实际的镜像文件写入方法,如果可以将文件写入操作卸载到不同的线程上,请不要发布。
提前致谢。
答案 0 :(得分:1)
如果想要同时向多个文件流写入相同的数据,他们将如何有效地实现这一目标?
我猜循环是唯一的选择。
为了实现这一目标,是否可以链接文件以使它们指向同一位置?
如果您的N个文件需要相同,请确保您只需编写一个文件并为此文件建立硬链接。请注意,并非所有文件系统都支持硬链接,并且对其中一个文件的任何更改都会将所有文件更改为一个,因为它基本上是相同的文件:
ln orig_file copy1
可以将文件写入操作卸载到不同的线程
当然,线程有助于提高性能,但是你的几行程序将会变得更长。尝试增加缓冲区下面的内容:
man setvbuf