Как получить полный размер файла при записи предохранителя - PullRequest
0 голосов
/ 29 августа 2018

Я разрабатываю файловую систему на основе предохранителя. но испытывают трудности во время развития.

У меня вопрос «как получить полный размер файла при fuse_write».

в fuse_write,

static int test_fuse_write(const char *path, const char *buf, size_t size,
          off_t offset, struct fuse_file_info *fi)

эти аргументы не связаны с исходным файлом. относится только к файлу назначения. Я хочу общий размер файла.

например, при копировании файла 'A' в файловой системе ext4 в файл 'B' в файловой системе fuse. если размер файла 'A' равен 12 МБ, когда функция fuse_write впервые вызывается, есть ли способ узнать размер файла (12 МБ)?

Извините, мне не хватает английского.

1 Ответ

0 голосов
/ 07 октября 2018

Ответ - нет.

Независимо от файловой системы fuse, write - это операция файловой системы, в то время как «copy» - утилита пользователя (например, cp в Unix). Утилита копирования выполняет операции чтения с исходным файлом и операции записи с целевым файлом. read s и write s "не знают" друг друга. Вы можете копать в исходный код cp

Более того, любые операции чтения и записи , выполняемые пользовательской утилитой, делятся ядром на последовательные блоки обычно одинакового размера (например, 64 КБ). Таким образом, операция записи данных длиной в несколько мегабайт будет рассматриваться в вашей реализации функции плавкой записи в виде последовательности (скажем,) последовательных вызовов длиной 64 КБ.

Следует поощрять, что это именно тот тип просветления, которого вы достигаете, когда пишете файловую систему fuse ...

...