2016-12-19 1 views
0

FUSE 드라이버를 구현하려고합니다. 내가 한 것은 당신이 자신의 함수로 오버라이드 한 기본 연산을 취하여 cout << operation << path << endl;을 추가했기 때문에 어떤 연산이 호출되는지 알 수있다.퓨즈 C++ 드라이버 - read() 구현

int Router::open(const char *path, struct fuse_file_info *fi) { 
    std::cout << "open " << path << std::endl; 
    return 0; 
} 

이 항상 성공해야하므로 오픈 0를 반환 여기 내 open 기능입니다. 이 버퍼에 h\0을 복사해야

int Router::read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) { 
    std::cout << "read " << path << "Size: " << size << "Offset: " << offset << std::endl; 
    buf[0] = 'h'; 
    buf[1] = '\0'; 
    return 2; 
} 

: 그런 다음, 여기 내 read 기능입니다. 하지만 내가 할 때 : cat myfileopen() 함수를 실행합니다. 성공하면 내 read() 함수가 실행되지만 cat 출력은 아무 것도 아닙니다. h을 출력해야하지만 그렇지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

또한 나는 OSX에서, 동일한 코드 만 open 기능을 실행하지만, read()

는 어떤 문제가 될 수 없었다 결코 것을 발견?

답변

0

그래서 내 문제는 함수에서 : getattr(...) 파일 크기를 지정하지 않았습니다. 수행 후 : st->st_size = 4096; 모든 것이 잘 작동했습니다.