2014-12-13 1 views
1

FUSE는 읽기 요청을 버퍼링하거나 캐시하여 4096 (대개 시스템 페이지 크기) 크기의 청크로 표시됩니다. 그러나 원시 요청과 크기를 가져올 필요가 있으므로 파이프 또는 메시지 큐와 같은 IPC 데이터 구조를 사용하고 있습니다. FUSE에서 읽기 요청으로 요청 된 실제 크기를 어떻게 얻을 수 있습니까?FUSE를 사용하면 4096 크기의 청크에서 발생하지 않는 읽기 요청을 어떻게받을 수 있습니까?

답변

1

statfs 함수를 사용하면 f_bsize 구조체 멤버로 읽는 최소 블록 크기를 설정할 수 있습니다.

static int my_statfs(char const * path, struct statvfs *buf) 
{ 
    void *my_data = fuse_get_context()->private_data; 

    // Get data 

    secure_zero(buf, sizeof *buf); 

    /* Must be 1 so that reads and writes aren't broken up into 
    * larger chunks.*/ 
    buf->f_bsize = 1U; 
    buf->f_frsize = 0U; /* ignored */ 
    buf->f_blocks = 0U; 
    buf->f_bfree = 0U; 
    buf->f_bavail = 0U; 

    buf->f_files = MY_INODES_MAX; 
    buf->f_ffree = inodes; 

    buf->f_favail = 0U; /* ignored */ 

    buf->f_fsid = 0U; /* ignored */ 
    buf->f_flag = 0U; /* ignored */ 
    buf->f_namemax = MY_PATH_MAX; 

    return 0; 
} 
관련 문제