gpt4 book ai didi

c - fuse 文件系统问题

转载 作者:行者123 更新时间:2023-12-02 02:36:15 26 4
gpt4 key购买 nike

我正在开发一个将数据存储在 RAM 中的 fuse 文件系统,但是当我向文件写入内容时遇到了问题。该文件变成一个空白文件。

代码如下:

#define FUSE_USE_VERSION 26

#include <fuse/fuse.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

char hello_data[200] = {'h', 'e', 'l', 'l', 'o', '\n'};
int hello_size = 6;

int homsifs_getattr(const char* path, struct stat* stbuf)
{
memset(stbuf, 0, sizeof(struct stat));

if (strcmp(path, "/") == 0)
stbuf->st_mode = S_IFDIR | 0666;
else if (strcmp(path, "/hello") == 0)
{
stbuf->st_mode = S_IFREG | 0666;
stbuf->st_size = hello_size;
}
else
return -ENOENT;

return 0;
}

int homsifs_readdir(const char* path, void* buf, fuse_fill_dir_t filler,
off_t offset, struct fuse_file_info* fi)
{
if (strcmp(path, "/") != 0)
return -ENOENT;

filler(buf, ".", NULL, 0);
filler(buf, "..", NULL, 0);
filler(buf, "hello", NULL, 0);

return 0;
}

int homsifs_open(const char* path, struct fuse_file_info* fi)
{
if (strcmp(path, "/hello") != 0)
return -ENOENT;

return 0;
}

int homsifs_read(const char* path, char* buf, size_t size, off_t offset,
struct fuse_file_info* fi)
{
int offset_size = hello_size - offset;

if (size > offset_size)
size = offset_size;

memcpy(buf, hello_data + offset, size);

return size;
}

int homsifs_truncate(const char* path, off_t size)
{
if (size > 200)
return -ENOMEM;

if (hello_size < size)
memset(hello_data + size, 0, size - hello_size);

hello_size = size;

return 0;
}

int homsifs_write(const char* path, const char* buf, size_t size, off_t offset,
struct fuse_file_info* fi)
{
if (strcmp(path, "/hello") != 0)
return -ENOENT;

memcpy(hello_data + offset, buf, size);

return size;
}

struct fuse_operations homsifs_operations =
{
.getattr = homsifs_getattr,
.readdir = homsifs_readdir,
.open = homsifs_open,
.read = homsifs_read,
.truncate = homsifs_truncate,
.write = homsifs_write
};

int main(int argc, char** argv)
{
return fuse_main(argc, argv, &homsifs_operations, NULL);
}

谁知道哪里出了问题?

谢谢。

最佳答案

当程序打开文件进行写入时,它会被截断。之后,任何写入的数据都无法访问,因为您没有正确更新 homsifs_write 中的 hello_size

关于c - fuse 文件系统问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1515219/

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