Функция getsetr FUSE зависает в lstat () - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь написать файловую систему fuse и написал основную функцию, которая должна быть минимальной. getattr, читать, читать, открывать. Я знаю, что моя функция getattr испорчена, потому что я запускаю файловую систему, используя gdb с комментариями, доходящими до вызова lstat (), затем gdb останавливается там. Программа не продолжает работу, и попытка доступа к точке монтирования просто приводит к тому, что файловая система по умолчанию начинает работать нерационально.

static int getAttr(const char *path, struct stat *stats) //stats is a buffer
{
    printf("getAttr: Entering getAttr\n");
    int returnStatus;
    char filePath[PATH_MAX];
    p2pFullPath(filePath, path); //Will print the completed path name.

    //printf("\np2pGetAttr: FilePath \"%s\", stat buffer=0x%08x)\n", path, stats);
    returnStatus = lstat(filePath, stats);

}

Остальная часть кода не имеет значения. Просто знайте, что он правильно возвращает путь к каталогу root, который я сохранил ранее, объединяет его с относительным путем, в результате чего получается что-то вроде hom / src / mountdir

Я передаю его в lstat (), но как как только эта строка запускает, вся программа останавливается. Я попытался добавить семафоры на случай, если возникли проблемы с многопоточностью, я использовал однопоточную команду -s, я даже проверил страницу man для lstat (), добавив соответствующие заголовки, но я не знаю, что не так. Эта реализация похожа на другую, которая работает хорошо.

Я предполагаю, что что-то упустил, но не совсем уверен, что.

...