Размер файла виртуального файла

Я использую FUSE для создания оверлейной файловой системы, в которой каталоги дополняются виртуальными сущностями. Я устанавливаю размер файла этих объектов равным 0, потому что у меня нет возможности узнать - до их чтения, что особенно дорого в моем случае - каким они должны быть.

Однако, очевидно, что происходит очевидная оптимизация, поскольку файлы нулевой длины не несут никакой read вызов (только open а также release).

Поэтому мой вопрос состоит в том, что я должен установить размер файла? Я знаю, что символические ссылки имеют размер их имени файла; будет ли это работать, учитывая, что это не символическая ссылка? В противном случае лучшее, что я могу сделать, это предоставить нижнюю границу для размера... Если read имеет только файловый дескриптор, размер куска и смещение, предположительно, он читает до EOF, а не как stat могу сказать это.

1 ответ

Решение

Размер файла должен быть правильным. Много кода зависит от этой информации, вы не можете просто опустить ее.

Это означает, что вам нужно найти эффективный способ кеширования / предварительного расчета этой информации.

Посмотрите на исходники cmdfs, которые запускают команды для всех файлов в файловой системе. У Linux Magazine есть обзорная статья.

Размер файла заранее неизвестен, смонтируйте с опцией -odirect_io и установить st_size = 0. Надеюсь, это будет полезно.

на странице руководства по предохранителю:

  direct_io
         This option disables the use of page cache (file content cache) in the kernel for this filesystem. This has several affects:

  1.     Each read(2) or write(2) system call will initiate one or more read or write operations, data will not be cached in the kernel.

  2.     The  return  value of the read() and write() system calls will correspond to the return values of the read and write operations.
         This is useful for example if the file size is not known in advance (before reading it).
Другие вопросы по тегам