防止线程写入同一个文件

我在Linux内核2.4(家庭作业)中实现了一个类似于FTP的协议,并且我的印象是,如果一个文件被打开以便任何后续的尝试通过另一个线程打开它将会失败,直到我实际尝试并发现它通过。

我如何防止这种情况发生?

PS:我正在使用open()打开文件。

PS2:我需要能够访问现有的文件。 我只是想阻止他们同时写入。

你可以保留一个打开的文件列表,然后在打开一个文件之前检查它是否已被另一个线程打开。 这种方法的一些问题是:

  • 您将需要使用同步原语(例如互斥锁)来确保列表是线程安全的。

  • 一旦程序完成,文件将需要从列表中删除。

系统级文件锁定是基于进程的,所以你不能使用它。 您将需要使用进程级锁定。 例如,通过使用pthreads定义一个互斥锁(锁)。

使用O_CREATE和O_EXCL标志打开()。 如果文件已经存在,那么调用将会失败。