FUSE (файловая система в пользовательском пространстве) с Qt-программированием - PullRequest
4 голосов
/ 05 сентября 2010

Я пытаюсь использовать FUSE с Qt, но fuse_main () и app.exec () имеют свой собственный цикл обработки событий.Это означает, что если я начну один, другой не запустится, так как первый, который запускается, препятствует запуску другого, как показано ниже.Как с этим справиться?

Для получения дополнительной информации о предохранителе перейдите по ссылке http://fuse.sourceforge.net/

. Если возможно, приведите пример.

Спасибо, Леандро.

Пример:

этот запретит запуск предохранителя:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv); // qt event loop
    a.exec();
    fuse_main(argc, argv, &hello_oper); // fuse event loop, it will not start
    return 0;
}

, а этот запретит запуск qt:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv); // it will not start due to fuse_main invocation
    fuse_main(argc, argv, &hello_oper);
    return a.exec();
}

Ответы [ 3 ]

1 голос
/ 05 сентября 2010

Вы должны запустить файловую систему в отдельном потоке.

0 голосов
/ 02 августа 2013

Я создал простой пример того, как FUSE и Qt могут использоваться вместе, см .: https://github.com/qknight/qt-fuse-example

удобную функцию fuse_main (..) нельзя использовать так как тогда у вас не было бы никаких средств: - перенаправить сигналы posix - вы не можете легко отключить процесс предохранителя, как при использовании QFuse.cpp: fuse_unmount (TUP_MNT, fs.ch);pthread_join (fs.pid, NULL);

, как обсуждалось в списке рассылки fuse-devel, есть два хороших способа интегрировать FUSE в Qt:

  1. реализовать его (как я это делал в qt-fuse ):

    Qt mainloop работает, FUSE mainloop также работает, оба в разныхнити * * тысяча двадцать-одна.я решил некоторые проблемы, связанные с преобразованием POSIX :: сигнала в Qt :: сигнала, так что возможно полное отключение.

  2. изменить библиотеку FUSE, чтобы иметь прямой доступ изЦикл событий Qt :

    mainloop Qt запущен, нет необходимости в главном цикле FUSE , поскольку он будет интегрирован в основной цикл Qt.не рассматривал это, но у него могут быть другие преимущества.

надеюсь, это поможет

0 голосов
/ 05 сентября 2010

Вы также можете запустить FUSE в отдельном процессе и обмениваться данными через сокеты / pipe / RPC / ... Предпочтительно, если FUSE вылетает или занят чем-то, ваш GUI все еще работает.

...