Создание файла на уровне файловой системы

Я работаю над кодом FAT файловой системы в Linux Kernel 3.3. Для проекта мне нужно создать файл во время монтирования в корневом каталоге смонтированной файловой системы. Я понял, где написать код для его создания, но есть несколько вопросов по созданию. (Функция vfat_mount в linux/fs/fat/namei_vfat.c).

Функция mount, похоже, не имеет точки монтирования в качестве пути, но я считаю, что данные корневого каталога хранятся в суперблоке. Я не знаю, как создать файл, используя эти доступные данные. Системный вызов open() не подходит, поэтому следует ли мне использовать для этой цели vfat_create, специфичную для файловой системы? Если да, может ли кто-нибудь помочь мне с более подробной информацией или некоторыми примерами.

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


person Sankarnm    schedule 01.05.2012    source источник
comment
Подумайте, может ли быть более подходящим сделать это, добавив или изменив инструмент или демон пользовательского пространства.   -  person Chris Stratton    schedule 03.05.2012
comment
Я не совсем понял, что вы имели в виду. Но если я внесу какие-либо изменения за пределы уровня файловой системы, это повлияет на другие файловые системы.   -  person Sankarnm    schedule 03.05.2012
comment
Я имею в виду, что вообще не пытайтесь делать это, меняя ядро. Делайте это полностью в пользовательском пространстве, то есть с помощью программы или демона. Доступ к реальным дисковым файлам изнутри ядра категорически не рекомендуется.   -  person Chris Stratton    schedule 03.05.2012
comment
Но мой проект состоит в том, чтобы изменить файловую систему FAT, чтобы добавить немного больше функциональности. Следовательно, это изменение необходимо мне.   -  person Sankarnm    schedule 04.05.2012
comment
Почему это твой проект? На каких знаниях философии проектирования ядра Linux было принято решение использовать этот подход?   -  person Chris Stratton    schedule 04.05.2012
comment
Процитируем GKH: теперь, вооружившись этими новообретенными знаниями о том, как злоупотреблять API системного вызова ядра и сразу раздражать программиста ядра, вы действительно можете испытать удачу и записать в файл изнутри ядра. - остальные см. на linuxjournal.com/article/8110.   -  person Chris Stratton    schedule 04.05.2012
comment
Хорошо, спасибо за это. Итак, если в ядре запись в файлы не рекомендуется, есть ли способ использовать зарезервированные секторы диска в качестве файла?   -  person Sankarnm    schedule 04.05.2012


Ответы (1)


Вы можете напрямую вызвать функцию filp_open(), определенную и экспортированную в fs / open.c. Она фактически вызывается системным вызовом open() и поэтому имеет те же аргументы. Нет необходимости вызывать функции, специфичные для файловой системы. файл, закройте его с помощью filp_close().

person itisravi    schedule 02.05.2012
comment
Но, как я сказал ранее, для этого нужен полный путь к файлу, верно? И поскольку я должен сделать это во время монтирования, это должно быть в специальной функции монтирования файловой системы, то есть vfat_mount() в данном случае. Внутри этой функции, похоже, нет доступа к пути, по которому смонтирована файловая система. Точка монтирования доступна в функции, вызывающей vfat_mount(). Так что можно сделать? - person Sankarnm; 02.05.2012
comment
Я попробовал filp_open() только с именем файла, и он создает файл в pwd, который находится в корневом / домашнем каталоге файловой системы ядра по умолчанию, а не в файловой системе, которую я смонтировал. - person Sankarnm; 02.05.2012