mmap()和锁定文件

Mic*_*rny 7 c posix locking mmap

请考虑以下代码段(错误处理故意丢失):

void* foo(const char *path, off_t size) {
    int fd;
    void *ret;

    fd = open(path, O_RDWR);
    lockf(fd, F_LOCK, 0);
    ret = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

    close(fd);
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

所以,想法是打开一个文件,mmap()它只返回数据指针.如果文件也可以在mmap时间锁定,那将会很棒.

每个mmap(3p):

mmap()函数应添加对与文件描述符fildes关联的文件的额外引用,该文件描述符fildes不会被该文件描述符上的后续close()删除.当没有更多映射到文件时,应删除此引用.

但是lockf(3p):

文件锁应在第一次关闭时通过文件的任何文件描述符的锁定过程释放.

所以,使用lockf()我必须保持fd打开并在非常长的时间内提供它的参考.是否有更好的可移植方法来确保文件被锁定直到munmap()被调用?

Joh*_*nck 5

尝试使用flock(2),其文档说"通过任何这些重复描述符上的显式LOCK_UN操作释放锁,或者当所有这些描述符都已关闭时."