2013-04-16 3 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"

그래서 내 시스템이 확장 된 속성으로 올바르게 작동하도록 설정되어 있다는 것을 알고 있습니다.

하지만 FUSE에서 프로그래밍 방식으로 이러한 속성을 설정하고 가져 오는 중입니다.

/* 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 파일 시스템에 다음과 같은 기능을 구현해야합니다

  • listxattr이 확장 속성의 값을 얻기 위해 지원 확장 속성
  • getxattr의 목록을 가져