我有几个C程序,它们同时访问(读取:fprintf / write fopen)文件系统上的不同文件。执行此并发访问保存的最佳方法是什么?我应该写一些文件锁(并且最好的方法是什么?)或者是否有更好的阅读方法(最好是在C99标准库中,额外的依赖会是一个问题)?或者我应该使用像SQLite这样的东西吗?
编辑: 我使用Linux作为操作系统。
编辑: 我真的不想在同一个文件中使用不同的进程编写代码,而是处理遗留的整体代码,这样可以节省文件中的中间步骤以便进行回收。我想要一种通过同时运行多个计算来加速计算的方法,这些计算具有相同的中间结果。
答案 0 :(得分:0)
您可以将fcntl()
与F_SETLK
或F_SETLKW
:
struct flock lock;
...
fcntl( fd, F_SETLKW, &lock );
请参阅man page fcntl(3)或this文章中的详情。
答案 1 :(得分:0)
通过使用写时复制技术,您可以确保您的文件在多个线程/进程的并发写入时不会被破坏:
mkostemps
)的新文件,并将原始文件复制到副本中。rename
将副本重命名为原始名称。这是以原子方式发生的,因此该文件的用户要么看到它的旧版本,要么看到新版本,但从未部分更新文件。有关详细信息,请参阅Things UNIX can do atomically。