2016-12-19 12 views
0

私はFUSEドライバを実装しようとしています。 私がやったことは、あなた自身の関数でオーバーライドした基本操作を取って、cout << operation << path << endl;を追加したので、どの操作が呼び出されるのか分かります。ここに私のopen機能は次のとおりです。ヒューズC++ドライバ - read()の実装

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

これは0を返しますので、開いているすべての時間を成功する必要があります。これは、バッファに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 myfileそれは私のopen()機能を実行し、それは私のread()機能を実行しますが、catの出力は何もありません。それはhを出力するはずですが、そうではありません。私は間違って何をしていますか?問題がある可能性がどのような

また、私はOSXの下で、まったく同じコードだけopen機能を実行することを見つけませんが、決してread()

答えて

0

私の問題は、関数内ででした:getattr(...)私はファイルサイズを指定していません。 実行後:st->st_size = 4096;すべてがうまくいきました:)