2016-12-19 3 views
0

Я пытаюсь внедрить драйвер FUSE. Что я сделал, взяты основные операции, которые вы переопределите своей собственной функцией, и я добавил cout << operation << path << endl;. Поэтому я вижу, какая операция вызывается. Вот моя open функция:Fuse C++ driver - read() реализация

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

Это возвращает 0 поэтому открытую удастся все время. Тогда, вот моя read функция:

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; 
} 

Это должно скопировать h\0 в буфер. Но когда я это делаю: cat myfile, он запускает мою функцию open(), которая преуспевает, тогда она запускает мою функцию read(), но вывод cat - ничто. Он должен выводить h, но это не так. Что я делаю не так?

Кроме того, я считаю, что под OSX, точно такой же код работает только функцию open, но тем не read()

Что может быть проблема?

ответ

0

Так что моя проблема заключалась в том, что в функции: getattr(...) Я не указал размер файла. После выполнения: st->st_size = 4096; Все работало нормально :)