用c/c ++锁定linux中的文件

rad*_*scu 9 c c++ linux locking

我想知道你是否可以:在linux中的文件中只锁定一行或一个字符,其他文件的其余部分是否仍可访问?我收到了一个关于在linux下使用c/c ++模拟文件上的事务的任务.请给我一个答案,如果答案是肯定的,请给我一些链接,我可以从中查看完成此任务.

谢谢,Madicemickael

use*_*104 14

fcntl()是一个可供选择的API,因为它是最少破坏的并且是POSIX.它是唯一一个跨NFS工作的.这也说是一场彻底的灾难,因为锁被绑定到进程,而不是文件描述符.这意味着如果您锁定一个文件,然后某个其他线程或某些库函数锁定/解锁它,您的锁也将被破坏.此外,您不能使用文件系统锁来保护同一进程的两个线程相互干扰.此外,您不应对多个用户可访问的文件使用文件锁,因为这样可以有效地使用户冻结彼此的进程.

总结:Unix上的文件锁定会产生比它解决的问题更多的问题.在你使用它,你必须真正确保你完全理解的语义.

  • 即使文件锁绑定到进程,您也可以在线程应用程序中使用互斥体来确保一个线程不会释放另一个线程创建的锁。 (2认同)

Emi*_*nov 12

是的,这是可能的.

Unix的方法是通过fcntllockf.无论你选择什么,一定要只使用它而不要混合两者.看看这个问题(有答案):fcntl,lockf,哪个更好用于文件锁定?.

如果可以,请查看UNIX环境中高级编程的第14.3节.