[英]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目錄時,會收到一條消息,告訴我該函數未實現(鏈接函數)。 我必須實現哪些功能才能知道鏈接指向的位置? 或者我在哪里填寫指針的方向?
謝謝!
這似乎對我有用:
添加一個int my_readlink(const char *path, char *buf, size_t size)
函數,你的struct fuse_operations
成員.readlink
應該指向它。 對於符號鏈接路徑,您的函數應該使用以零結尾的字符串填充緩沖區buf
,該字符串是鏈接目標的路徑。 不要寫超過size
字節。 例如,做一些事情:
strncpy(buf, "/target/path", size);
在my_getattr()
函數中( struct fuse_operations
成員.getattr
應該指向),對於符號鏈接路徑,在第二個參數( struct stat * stbuf
)中設置:
stbuf->st_mod
到S_IFLNK | 0777
S_IFLNK | 0777
stbuf->st_nlink
to 1
stbuf->st_size
到目標路徑的長度(不包括長度中字符串的零終止符) 您需要實現readdir
函數,請參閱:
要實現符號鏈接,您需要實現readlink()
函數 - 使用以null結尾的字符串填充提供的緩沖區,該字符串是鏈接的目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.