2013-04-16 192 views
1

我試圖實現一個FUSE文件系統,包括設置/獲取擴展文件屬性的能力。在這種情況下,我感興趣的屬性是創建布爾條件以將文件標記爲加密的屬性。假設我有一個名爲test.txt的文件。從一個終端窗口,我很容易執行以下操作:FUSE擴展屬性

setfattr -n user.encrypted -v 1的test.txt

getfattr -n user.encrypted的test.txt

和得到的輸出:

#文件:test.txt的

user.encrypted = 「1」

所以,我知道我的系統已正確設置爲使用擴展屬性。

但我堅持設置並獲取這些屬性編程從保險絲內。例如,我有以下功能:

/* File open operation */ 
int bb_open(const char *path, struct fuse_file_info *fi) 
{ 
    int retstat = 0; 
    int fd; 
    int isEncrypted; 
    char user[] = "user"; 
    char encAttr[] = "encrypted"; 

    fd = open(path, fi->flags); 
    if (fd < 0) 
     retstat = bb_error("bb_open open"); 

    log_msg("\nAbout to get encryption attribute\n"); 
    /* get the encryption attribute */ 
    isEncrypted = fgetxattr(fd, user, encAttr, 1); 

    log_msg("\nisEncrypted: %d\n", isEncrypted); 

    return retstat; 
} 

當運行此,即使在命令行設置此屬性後,fgetxattr總是失敗(即,其返回的值-1)。在我的日誌文件的輸出是:

isEncrypted = -1

顯然,我錯誤地調用這個函數,但我不知道該如何糾正。誰能幫忙?謝謝。

回答

2

你需要實現你的FUSE文件系統以下功能: