gpt4 book ai didi

c - mmap() 和锁定文件

转载 作者:太空狗 更新时间:2023-10-29 17:12:04 25 4
gpt4 key购买 nike

考虑以下代码片段(故意缺少错误处理):

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;
}

所以,我们的想法是打开一个文件,mmap() 它并只返回数据指针。如果文件也可以在 mmap 时间锁定,那就太好了。

根据 mmap(3p):

The mmap() function shall add an extra reference to the file associated with the file descriptor fildes which is not removed by a subsequent close() on that file descriptor. This reference shall be removed when there are no more mappings to the file.

但是根据lockf(3p):

File locks shall be released on first close by the locking process of any file descriptor for the file.

因此,使用 lockf() 我必须保持 fd 打开并携带它的引用很长时间。是否有更好的可移植方法来确保文件在 munmap() 被调用之前被锁定?

最佳答案

尝试使用 flock(2) ,其文档说“锁定通过对这些重复描述符中的任何一个的显式 LOCK_UN 操作释放,或者在所有此类描述符已关闭时释放。”

关于c - mmap() 和锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8202750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com