2017-12-19 39 views
0

저는 FUSE와 C와 FS에 익숙하지 않아 libfuse 패키지에 들어있는 passthrough FS 예제를 망설입니다. 누구든지 코드에서 FUSE가 내 루트 디렉토리를 비추도록 명령 된 힌트를 줄 수 있습니까? 왜냐하면 나는 xmp_init()과 main() 두 개의 기본 함수를 아주 간결하게 표현했다.FUSE lib passthrough.c 예제입니다. 내/정확히 거울은 어디 있니?

static void *xmp_init(struct fuse_conn_info *conn, 
       struct fuse_config *cfg) 
{ 
    (void) conn; 
    cfg->use_ino = 1; 
    cfg->entry_timeout = 0; 
    cfg->attr_timeout = 0; 
    cfg->negative_timeout = 0; 

    return NULL; 
} 

int main(int argc, char *argv[]) 
{ 
    umask(0); 
    return fuse_main(argc, argv, &xmp_oper, NULL); 
} 

을 그리고 다른 기능은 같은 단지 libfuse 인터페이스 ... 물건의 구현입니다 : 여기

그들이 있습니다. 필자는 자신 만의 FS를 만들 필요가 있습니다. 필자는 passthrough.c를 수정하여 마운트 된 FS가 흰색 시트가 될 수 있도록 구현 된 기능을 사용하고 파일과 물건을 관리 할 수 ​​있도록해야합니다.

미리 감사드립니다.

답변

0

이 예에서 퓨즈 동작의 구현을 읽으면 그 결과가 표시됩니다. 루트 파일 시스템의 미러링에 대한이 특정 세부 정보가 숨겨진 단일 위치는 없습니다.

예를 들어 stat(2) 시스템 호출과 비슷한 getattr fuse operation을 확인하고 주어진 파일의 stat 구조체를 (포인터를 통해) 반환해야합니다.

일부 파일이 퓨즈 파일 시스템에서 액세스 될 때 gettattr 작업을 구현하는 함수가 먼저 호출되므로이 작업을 필수적으로 구현해야합니다.

the implementation in the example에서 상대 :

static int xmp_getattr(const char *path, struct stat *stbuf, 
      struct fuse_file_info *fi) 
{ 
    (void) fi; 
    int res; 

    res = lstat(path, stbuf); 
    if (res == -1) 
     return -errno; 

    return 0; 
} 

우리가이 코드가하는 것을보고는 그냥 같은 인수 lstat(2) 호출하는 것입니다.

그래서 당신은이 같은 예제 파일 시스템을 마운트 할 때 : 다음

$ ./passthrough /tmp/example 

거기에 파일을 나열하려고 : 당신의 루트에 액세스하기 때문에

$ ls /tmp/example/ 

fuselib 경로 "/"xmp_getattr()를 호출을 퓨즈 파일 시스템. 그런 다음 xmp_getattr()의 코드는 유사한 파일에 대해 일반적인 syscall을 호출하여 루트 파일 시스템이 /tmp/example 마운트 포인트에 미러링 된 것처럼 보입니다.