Единственный способ обнаружения пределов возможного состоит в том, чтобы отважиться сделать шаг в невозможное.
Артур Кларк, Второй закон Кларка
Единственный способ обнаружения пределов возможного состоит в том, чтобы отважиться сделать шаг в невозможное.
flush
и release
. Судя по описанию, обработчик flush
вызывается, когда происходит системный вызов close()
для файлового дескриптора. То есть сколько раз вызывался open()
для файла, столько же раз будет вызван close()
и, соответственно, flush
. А release
вызывается всего один раз, когда в системе не осталось больше ни одного открытого дескриптора этого файла.fuse_operations::flush
есть небольшое примечание:NOTE:The flush() method may be called more than once for each open(). (...) It is not possible to determine if a flush is final, so each flush should be treated equally. Multiple write-flush sequences are relatively rare, so this shouldn't be a problem.
echo
с выводом результата в файл (например, "echo blablabla >./1.txt
") приводит к следующей последовательности вызовов обработчиков: create - flush - write - flush - release
. То есть flush
вызывается два раза, причем один раз до записи данных в файл, а второй раз — после. Получается, что корректно закрыть файловый дескриптор в обработчике flush
невозможно. release
, чтобы хоть как-то обойти проблему двойного вызова flush
, а обработчик flush
остаётся пустой, потому что при таком раскладе он совершенно бесполезен.