gpt4 book ai didi

c - 如何在 FUSE 中创建符号链接(symbolic link)?

转载 作者:太空狗 更新时间:2023-10-29 17:23:14 24 4
gpt4 key购买 nike

我正在开发一个 FUSE 应用程序,该应用程序采用一个带有 mp3 的目录并将文件系统安装在具有以下结构的另一个目录中(根据它们的标签):

    Artist1
|
-----> Album11
|
-----> Track01
-----> Track02
-----> Track03
-----> Track04
-----> Track05
-----> Album12
....
Artist2
|
-----> Album21
-----> Album22
....
Artist3
.....

我正在使用 sqlite3 数据库来维护指向真实文件的链接。艺术家和专辑元素是文件夹,轨道元素是指向真实元素的链接。

我已经实现了为艺术家和专辑创建文件夹。但现在我有一个问题。

我有这个:

  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 目录时,您会收到一条消息,告诉我该功能未实现(链接功能)。我必须实现哪个功能才能知道链接指向何处?或者我必须在哪里填写指针的方向?

谢谢!

最佳答案

这似乎对我有用:

  1. 添加 int my_readlink(const char *path, char *buf, size_t size)函数,你的 struct fuse_operations成员(member) .readlink 应该指向。对于符号链接(symbolic link)路径,您的函数应填充缓冲区 buf带有一个以零结尾的字符串,它是链接目标的路径。不要写超过 size字节。例如。做类似的事情:

    strncpy(buf, "/target/path", size);
  2. 在你的my_getattr()函数(struct fuse_operations成员 .getattr 应该指向),对于符号链接(symbolic link)路径,在第二个参数(struct stat * stbuf)中设置:

    • stbuf->st_modS_IFLNK | 0777
    • stbuf->st_nlink1
    • stbuf->st_size到目标路径的长度(长度中不包括字符串的零终止符)

关于c - 如何在 FUSE 中创建符号链接(symbolic link)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6096193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com