如何为并发C访问保存文件?

时间:2014-12-02 10:32:40

标签: c

我有几个C程序,它们同时访问(读取:fprintf / write fopen)文件系统上的不同文件。执行此并发访问保存的最佳方法是什么?我应该写一些文件锁(并且最好的方法是什么?)或者是否有更好的阅读方法(最好是在C99标准库中,额外的依赖会是一个问题)?或者我应该使用像SQLite这样的东西吗?

编辑: 我使用Linux作为操作系统。

编辑: 我真的不想在同一个文件中使用不同的进程编写代码,而是处理遗留的整体代码,这样可以节省文件中的中间步骤以便进行回收。我想要一种通过同时运行多个计算来加速计算的方法,这些计算具有相同的中间结果。

2 个答案:

答案 0 :(得分:0)

您可以将fcntl()F_SETLKF_SETLKW

一起使用
struct flock lock;
...
fcntl( fd, F_SETLKW, &lock );

请参阅man page fcntl(3)this文章中的详情。

答案 1 :(得分:0)

通过使用写时复制技术,您可以确保您的文件在多个线程/进程的并发写入时不会被破坏:

  1. 作家打开要更新的文件以供阅读。
  2. 作者创建一个具有唯一名称(mkostemps)的新文件,并将原始文件复制到副本中。
  3. 作者修改副本。
  4. 作者使用rename将副本重命名为原始名称。这是以原子方式发生的,因此该文件的用户要么看到它的旧版本,要么看到新版本,但从未部分更新文件。
  5. 有关详细信息,请参阅Things UNIX can do atomically