我需要在/ dev / shm中创建一个大文件(几千字节)。这是Linux机器上的RAMdisk。这必须尽可能快。我目前在C中使用5个单独的POSIX线程来创建连续的100 MB字节段,然后我有另一个线程将它们连接到主输出文件。
这很快,但我想要更快。我可以消除连接线程吗?有没有办法打开文件,并让每个线程将它的100 MB字节写入最终输出文件中的正确位置?
答案 0 :(得分:3)
最快的方法是拨打truncate()
或ftruncate()
将文件扩展到您想要的尺寸。
然后,您可以mmap()
将文件放入进程的内存空间,并让每个线程将其部分写入映射区域。
答案 1 :(得分:2)
只需为每个线程打开一次文件,lseek
到线程假定开始的位置,并write
正常。或者,您可以使用pwrite
指定写入的位置;在这种情况下,所有线程都可以共享一个open,因为它们不需要使用当前文件位置。
如果您想提前确保可用空间并为整个最终文件保留,posix_fallocate
应该可以为您处理。