如何在 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 errno
的 13
(权限被拒绝)。请注意,目录中只有一个文件,它之所以存在,是因为我的 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);
对于一项作业,我们必须使用 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 errno
的 13
(权限被拒绝)。请注意,目录中只有一个文件,它之所以存在,是因为我的 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);