2015-04-06 88 views
2

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

我试图把我自己实现的保险丝初始化函数内的以下内容:

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()我的-1(错误)返回值的结果和1一个errno (不允许操作)。

如果我再打电话给我读功能(通过打开一个文件),现在我仍然得到的-1(错误)的返回值,但13的1 errno(拒绝)。请注意,目录中只有一个文件,它只在那里,因为我的readdir函数使用该文件的名称填充缓冲区。目录中没有物理文件。

我可能接近这一切都是错误的。 如何创建一个空文件?

FUSE只是一个记忆的东西吗?

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

+0

FUSE

这是由试图在 “/” 创建一个文件夹,授予每个人完全的权限,然后写入该文件夹解决绝对不限于仅在内存中。由于您收到了不允许的错误,因此我会验证您的用户空间文件系统之外的位置(路径)是否可写。 – 2015-04-06 02:30:15

+0

哼好吧,那么至少这意味着我想要做的事情可以完成。我会尝试的。 – Steven 2015-04-06 02:32:41

+0

谢谢@PaulDardeau,你是对的。 – Steven 2015-04-07 02:39:22

回答

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);