如何在FUSE中建立符号链接?

问题描述

| 我正在开发一个FUSE应用程序,该应用程序使用一个带有mp3 \的目录,并将文件系统挂载到具有以下结构的另一个目录中(根据其标签):
    Artist1
       |
       -----> Album11
                 |
                 -----> Track01
                 -----> Track02
                 -----> Track03
                 -----> Track04
                 -----> Track05
       -----> Album12
       ....
    Artist2
       |
       -----> Album21
       -----> Album22
       ....
    Artist3
    .....
我正在使用sqlite3数据库维护指向实际文件链接。 Artist和Album元素是文件夹,tracks元素是指向真实文件夹的链接。 我已经实现了为艺术家和专辑创建文件夹。但是现在我有一个问题。 我有这个:
  static int getattr(...) {

      ....
      else if ( level == 0  || level == 1 || level == 2 )
      {
          // Estamos en el primer nivel. Son artistas,y por lo tanto,carpetas.
          stbuf->st_mode = S_IFDIR | 0755;
          stbuf->st_nlink = 2;
          lstat(path,stbuf);
      }
      else if (level == 3) {
      // Estamos en el tercer nivel. Son canciones,por lo que son enlaces
      stbuf->st_mode = S_IFLNK | 0755;
      stbuf->st_nlink = 2;
      lstat(path,stbuf);
      }

      .....
  }
现在,当我将它们放在tracks目录中时,会收到一条消息,告诉我该功能尚未实现(链接功能)。我必须实现哪个功能才能知道链接指向何处?还是我必须在哪里填充指针的方向? 谢谢!     

解决方法

这似乎为我工作: 添加一个
int my_readlink(const char *path,char *buf,size_t size)
函数,您的
struct fuse_operations
成员
.readlink
应该指向该函数。对于符号链接路径,您的函数应在缓冲区
buf
中填充一个以零结尾的字符串,该字符串是链接目标的路径。写的字节数不要超过6个字节。例如。做类似的事情:
strncpy(buf,\"/target/path\",size);
在您的
my_getattr()
函数中(
struct fuse_operations
成员
.getattr
应该指向该函数),对于符号链接路径,在第二个参数(
struct stat * stbuf
)中进行设置:
stbuf->st_mod
S_IFLNK | 0777
stbuf->st_nlink
1
目标路径长度的<16>(长度不包含字符串的零终止符)     ,要实现符号链接,您需要实现
readlink()
函数-您在提供的缓冲区中填充一个以空终止的字符串,该字符串是链接的目标。     ,您需要实现
readdir
函数,请参见: libfuse:fuse_operations结构参考     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...