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

时间:2015-04-06 00:37:26

标签: c linux unix filesystems fuse

对于一项任务,我们必须使用C构建一个FUSE文件系统。我正在尝试在我启动保险丝时挂载的mountpoint目录中创建一个空文件,但它无效。

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

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

在我完成之后,当我尝试导航到挂载点时发生的事情是我收到错误:Transport endpoint is not connected

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

然后我把以下内容放在我的read:

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

然后当我查看调用mknod()的结果时,我得到-1(错误)的返回值和errno的{​​{1}}(操作不允许) )。

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

我可能接近这一切都错了。 如何创建空文件?

FUSE只是内存中的东西吗?

好吧也许问这个可能更好: 如果我想创建一个FUSE文件系统,它所做的就是在mountpoint中创建一个物理空文件并让你访问该文件,我该怎么做?

1 个答案:

答案 0 :(得分:0)

事实证明,当FUSE启动时,它从根目录开始,“/”不是您指定的挂载点。所以通过运行诸如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);