如何在 C 中的 FUSE 中创建文件?

How do I create a file in FUSE in C?

对于一项作业,我们必须使用 C 构建一个 FUSE 文件系统。我试图在启动 fuse 时挂载的挂载点目录中创建一个空文件,但它不起作用。

我尝试将以下内容放入我自己的 fuse init 函数实现中:

FILE * fp = fopen("data.0", "w");
fclose(fp);

完成后,当我尝试导航到挂载点时发生错误:Transport endpoint is not connected.

当我尝试使用 -d 标志在调试模式下 运行 FUSE 时,终端和 FUSE 冻结,然后我什至无法导航到包含挂载点的目录。

然后我将以下内容放入我的读取实现中:

mknod("data.0", 33206, 20); // a mode of 33206 means that it's a regular file with permissions 666

然后当我查看调用 mknod() 的结果时,我得到了 return 的 -1 值(错误)和 errno 的 [=17] =](不允许操作)。

如果我再次调用我的读取函数(通过打开一个文件),现在我仍然得到一个 return 值 -1 (错误)但是一个 1 errno13(权限被拒绝)。请注意,目录中只有一个文件,它之所以存在,是因为我的 readdir 函数用该文件的名称填充了缓冲区。目录中没有物理文件。

我可能完全错了。 如何创建一个空文件?

FUSE 只是内存中的东西吗?

好吧也许最好问这个: 如果我想创建一个 FUSE 文件系统,而它所做的只是在挂载点创建一个物理空文件并让您访问该文件,我该怎么做?

原来FUSE启动的时候是从根目录启动的,"/"不是你指定的挂载点。所以通过 运行ning 里面的东西 init:

FILE* fp = fopen("data.0", "w+");
fclose(fp);

FUSE 崩溃,因为该命令 运行 作为无权限写入根目录 ("/") 的登录用户。

通过尝试在“/”中创建一个文件夹,授予每个人完全权限,然后写入该文件夹,解决了这个问题:

sudo -s
cd /
mkdir data
chmod 777 data

然后在保险丝init:

FILE* fp = fopen("/data/data.0", "w+");
fclose(fp);