簡體   English   中英

如何在FUSE中創建符號鏈接?

[英]How to make symbolic links in FUSE?

我正在開發一個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);
      }

      .....
  }

現在,當我進入track目錄時,會收到一條消息,告訴我該函數未實現(鏈接函數)。 我必須實現哪些功能才能知道鏈接指向的位置? 或者我在哪里填寫指針的方向?

謝謝!

這似乎對我有用:

  1. 添加一個int my_readlink(const char *path, char *buf, size_t size)函數,你的struct fuse_operations成員.readlink應該指向它。 對於符號鏈接路徑,您的函數應該使用以零結尾的字符串填充緩沖區buf ,該字符串是鏈接目標的路徑。 不要寫超過size字節。 例如,做一些事情:

     strncpy(buf, "/target/path", size); 
  2. my_getattr()函數中( struct fuse_operations成員.getattr應該指向),對於符號鏈接路徑,在第二個參數( struct stat * stbuf )中設置:

    • stbuf->st_modS_IFLNK | 0777 S_IFLNK | 0777
    • stbuf->st_nlink to 1
    • stbuf->st_size到目標路徑的長度(不包括長度中字符串的零終止符)

您需要實現readdir函數,請參閱:

libfuse:fuse_operations結構參考

要實現符號鏈接,您需要實現readlink()函數 - 使用以null結尾的字符串填充提供的緩沖區,該字符串是鏈接的目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM