gpt4 book ai didi

c++ - 如何为 fuse readdir() 正确分配缓冲区?

转载 作者:行者123 更新时间:2023-12-03 07:04:18 25 4
gpt4 key购买 nike

在使用 C++ 包装器实现 FUSE 文件系统时,我遇到了 readdir()功能。这是我从 passthrough.c 模仿的函数:

static int xmp_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
off_t offset, struct fuse_file_info *fi,
enum fuse_readdir_flags flags)
{
DIR *dp;
struct dirent *de;

(void) offset;
(void) fi;
(void) flags;

dp = opendir(path);
if (dp == NULL)
return -errno;

void* mybuf = malloc(10000);

while ((de = readdir(dp)) != NULL) {
struct stat st;
memset(&st, 0, sizeof(st));
st.st_ino = de->d_ino;
st.st_mode = de->d_type << 12;
if (filler(mybuf, de->d_name, &st, 0, 0))
break;
}

closedir(dp);
return 0;
}

(来源: https://github.com/libfuse/libfuse/blob/master/example/passthrough.c):

我的文件系统要求我在本地分配缓冲区,所以不要使用参数化的 void *buf ,我尝试像这样创建一个本地缓冲区:
void* buf = malloc(10000);

无论我分配了多大的缓冲区,当 filler() 时,我总是会遇到段错误。叫做。作为对照,我尝试在完全工作的 passthrough.c 中类似地分配一个本地缓冲区。例如,我仍然收到段错误错误。这再次证实了我的问题在于缓冲区分配。

分配要在 filler() 中使用的缓冲区的正确方法是什么? fuse 功能?

最佳答案

使用提供的缓冲区 *buf like

 if (filler(buf, de->d_name, &st, 0, 0))
break;
它会工作得很好。没有必要自己创建缓冲区。
这就是我使用它的方式,它工作得很好。

关于c++ - 如何为 fuse readdir() 正确分配缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57310635/

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