我正在Linux内核2.4(家庭作业)中实现类似FTP的协议,我的印象是,如果一个文件打开写入任何后续尝试由另一个线程打开它应该会失败,直到我实际尝试它发现它经历了。
如何防止这种情况发生?
PS:我正在使用open()打开文件。
PS2:我需要能够访问现有文件。我只是想阻止它们被同时写入。
答案 0 :(得分:2)
您可以保留打开文件的列表,然后在打开文件之前检查它是否已被另一个线程打开。这种方法的一些问题是:
您需要使用同步原语(如互斥锁)来确保列表是线程安全的。
程序完成后,需要从列表中删除文件。
答案 1 :(得分:1)
系统级文件锁定是基于进程的,因此您无法使用它。您将需要使用进程级锁定。例如,通过使用pthreads定义互斥锁(锁定)。
答案 2 :(得分:1)
使用O_CREATE和O_EXCL标志打开()。这样,如果文件已存在,则调用将失败。