问题描述
我不知道是否有什么办法可以锁定,当我用打开文件解锁的Linux文件的fopen
(不是打开
)?
I wonder if there is any way to lock and unlock a file in Linux when I open a file using fopen
(not open
)?
根据此线程:,的fopen
超过preferred 打开
。
Based on this thread: C fopen vs open, fopen
is preferred over open
.
如何通过创建和删除文件锁实现我自己的文件锁定(如果可能)?
How can I implement my own file lock (if possible) by creating and deleting lock files?
推荐答案
在Linux上,如果你需要一个文件描述符(例如,传递到一个文件锁定原始的),你可以使用的进行检索。检索文件描述符后,您可以使用它,就好像它已经被退回打开
。
In Linux, if you need a file descriptor (e.g., to pass to a file-locking primitive), you can use fileno(FILE*)
to retrieve it. After retrieving the file descriptor, you can use it as if it had been returned by open
.
例如,而不是
int fd = open("myfile.txt", flags);
int result = flock(fd, LOCK_SH);
您同样可以做到这一点:
you could equally well do this:
FILE* f = fopen("myfile.txt", "r");
int result = flock(fileno(f)), LOCK_SH);
注意的fileno
在POSIX标准的定义,但不是在C或C ++标准。
Note that fileno
is defined in the POSIX standard, but not in C or C++ standards.
至于你的第二个问题,Linux的有这样一段话:
As for your second question, the Linux open()
man page has this to say:
执行文件的原子使用锁就是锁定的解决方案
创建相同的文件系统上的唯一的文件(例如,掺入
主机名和PID),使用做一个链接锁文件。如果
链接()返回0,锁是成功的。否则,请使用
检查独特的文件,如果它的连接数已增至2,
这种情况下,锁也是成功的。
这篇关于如何使用FOPEN锁定文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!