如何使用FOPEN锁定文件

如何使用FOPEN锁定文件

本文介绍了如何使用FOPEN锁定文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道是否有什么办法可以锁定,当我用打开文件解锁的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锁定文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-19 21:52