如何正确分配Fuse ReadDir()的缓冲区
How to correctly allocate a buffer for fuse readdir()?
在使用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/master/example/passplash.c(:
我的文件系统要求我本地分配缓冲区,因此我不使用参数化的void *buf
,而是尝试创建一个本地缓冲区,例如:
void* buf = malloc(10000);
不管我分配了多大的缓冲区,当调用filler()
时,我总是会遇到分段故障。作为控件,我试图在完全工作的passthrough.c
示例中类似地分配本地缓冲区,但我仍然收到分段故障错误。这重申了我的问题在于缓冲区分配。
分配用于filler()
Fuse功能中使用的缓冲区的适当方法是什么?
使用提供的缓冲区 *buf
if (filler(buf, de->d_name, &st, 0, 0))
break;
它可以正常工作。不必创建自我缓冲。
这就是我的使用方式,它可以正常工作。
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- 套接字读取后,我在缓冲区中看到意外输入
- std::带有自定义缓冲区的 iostream 不允许我写入
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- OpenGL 16 位模板缓冲区?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 在 openGL 中多次绑定缓冲区
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 如何正确分配Fuse ReadDir()的缓冲区