【发布时间】:2015-06-10 09:56:56
【问题描述】:
对于一个作业,我们必须使用 C 构建一个 FUSE 文件系统。我试图在我启动 fuse 时挂载的挂载点目录中创建一个空文件,但它不起作用。
我尝试将以下内容放入我自己的 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(错误)的返回值和1 的errno(不允许操作)。
如果我再次调用我的读取函数(通过打开一个文件),现在我仍然得到一个返回值 -1(错误),但 13 的 1 个 errno(权限被拒绝)。请注意,目录中只有一个文件,它之所以存在,是因为我的readdir 函数用该文件的名称填充缓冲区。目录中没有物理文件。
我可能在处理这一切时都错了。 如何创建一个空文件?
FUSE 只是内存中的东西吗?
好吧,也许最好这样问: 如果我想创建一个 FUSE 文件系统,它所做的只是在挂载点创建一个物理空文件并让您访问该文件,我该怎么做?
【问题讨论】:
-
FUSE 绝对不仅限于内存。由于您收到不允许的错误,我将验证该位置(路径)是否可在您的用户空间文件系统之外为您写入。
-
嗯好吧,那么至少这意味着我想做的事情可以完成。我会试试的。
-
谢谢@PaulDardeau,你是对的。
标签: c linux unix filesystems fuse