Есть ли у Linux системные вызовы для доступа ко всем функциям файловых систем, которые она поддерживает?


12

Linux поддерживает множество файловых систем (например: ext3, NTFS, FAT32 и т. Д.).

Следующая диаграмма показывает, как Linux позволяет процессу получать доступ к файлам:

введите описание изображения здесь

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

Linux предоставляет множество системных вызовов на доступ к файлам (например , read(), write(), rename()и т.д.).

Теперь read()и write()и rename()работать на всех файловых систем , которые поддерживает Linux.

Но есть определенные особенности, которые существуют только в некоторых файловых системах, но отсутствуют в других. Например: в файловой системе NTFS вы можете установить бит архива для файла, а в файловой системе ext3 это сделать невозможно.

Теперь мой вопрос: есть ли у Linux системные вызовы для доступа ко всем функциям поддерживаемых файловых систем? например: есть ли в Linux системный вызов для установки бита архива для файла в файловой системе NTFS?

Ответы:


10

Linux имеет системный вызов для установки бита архива для файла в файловой системе NTFS?

Для этого конкретного случая ntfs-3gдрайвер экспортирует атрибуты файла через расширенные атрибуты , см. Можно ли установить бит «Архив» для файла в NTFS в Linux?

Файловая система (V) FAT имеет аналогичные атрибуты файлов, но она использует ioctl()функцию для доступа к ним, см ioctl_fat(2). ( ioctl()это своего рода многоцелевой системный вызов, используемый для всех видов специфических для устройства вещей, которые не требуют реального системного вызова.)

Теперь мой вопрос: есть ли у Linux системные вызовы для доступа ко всем функциям поддерживаемых файловых систем?

Трудно ответить наверняка , но был хотя бы один пример обратного. ext4 внутренне поддерживает временную метку «время рождения» для файлов (например, реальное время создания, в отличие от ctimeизменений, вносимых при модификации inode). Но хотя ext4 и является «стандартной» файловой системой, долгое время не было никакого системного вызова для доступа ко времени рождения.

Это должно быть поддержано сейчас, statx()системный вызов добавлен в Linux 4.11 в апреле 2017 года.

Связанный:


3
нтфс! = жир. По крайней мере, версия ядра ntfs НЕ имеет никакого способа установить или получить флаг архива, хотя его заголовки определяют его. Похоже, что только ntfs-3g на основе предохранителей поддерживает его (через расширенные атрибуты, а не через специальные ioctl).
Дядя Билли

Это напрямую не связано с вопросом, но в дополнение к вашему упоминанию statxон теперь поддерживается в библиотеке C и в последней версии coreutils, выпущенной несколько дней назад.
Стивен Китт

@UncleBilly, д'оо, очевидно, я не умею читать, но просто автоматически подумала о (v) жира. Спасибо, что заметили это, я посмотрю, смогу ли я найти более подходящую ссылку.
ilkkachu
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.