В современных версиях BSD подобная функция флагов индексного дескриптора реализована в виде указания флагов файла с помощью команд chflags(1) и chflags(2).

Первой файловой системой Linux, которая стала поддерживать флаги индексного дескриптора, оказалась ext2, и поэтому такие флаги иногда называют расширенными атрибутами файла в файловой системе ext2. Впоследствии поддержка флагов индексного дескриптора была добавлена и в другие системы: Btrfs, ext3, ext4, Reiserfs (с версии Linux 2.4.19), XFS (с версий Linux 2.4.25 и 2.6) и JFS (с версии Linux 2.6.17).

Количество флагов индексного дескриптора немного различается для разных файловых систем. Чтобы использовать флаги индексного дескриптора в системе Reiserfs, необходимо при ее монтировании указать параметр mount — o attrs.

Напрямую из оболочки флаги индексного дескриптора можно установить и просмотреть с помощью команд chattr и lsattr, как показано в следующем примере:

$ lsattr myfile

— myfile

$ chattr +ai myfile Установить флаги Append Only и Immutable

$ lsattr myfile

— ia- myfile

Внутри какой-либо программы флаги индексного дескриптора можно извлечь и изменить с помощью системного вызова ioctl(), что будет подробно описано ниже.

Основная часть флагов индексного дескриптора предназначена для использования с обычными файлами, хотя некоторые из этих флагов можно задействовать также (или только) и для каталогов. В табл. 15.6 приведены доступные флаги. Указано соответствующее имя флага (оно определено в файле ), применяемое при выполнении системного вызова ioctl() из программ, а также буква параметра, используемого с командой chattr.

Таблица 15.6. Флаги индексного дескриптора

Константа — Параметр команды chattr — Назначение

FS_APPEND_FL — a — Только добавление (необходима привилегия)

FS_COMPR_FL — c — Задействовать сжатие файла (не реализовано)

FS_DIRSYNC_FL D — D — Синхронное обновление каталогов (начиная с версии Linux 2.6)

FS_IMMUTABLE_FL — i — Неизменяемый (необходима привилегия)

FS_JOURNAL_DATA_FL — j — Задействовать журналирование данных (необходима привилегия)

FS_NOATIME_FL — A — Не обновлять время последнего доступа к файлу

FS_NODUMP_FL — d — Без дампа

FS_NOTAIL_FL — t — Без упаковки хвостов

FS_SECRM_FL — s — Защищенное удаление (не реализовано)

FS_SYNC_FL — S — Синхронное обновление файла (и каталога)

FS_TOPDIR_FL — T — Считать каталогом верхнего уровня для стратегии Орлова (начиная с версии Linux 2.6)

FS_UNRM_FL — u — Можно восстановить удаленный файл (не реализовано)

До версии Linux 2.6.19 константы FS_*, показанные в табл. 15.6, не определялись в файле . Вместо этого существовал набор заголовочных файлов, характерных для какой-либо файловой системы, и данные файлы задавали для нее имена констант, значения которых были одинаковыми. Так, в файловой системе ext2 была константа EXT2_APPEND_FL, определенная в файле ; файловая система Reiserfs имела константу REISERFS_APPEND_FL, определенную с тем же значением в файле  и т. д. Поскольку каждый из этих заголовочных файлов задает для соответствующих констант одинаковые значения, в старых версиях ОС, не использующих определения в файле , можно включать любой заголовочный файл и применять имена, характерные для файловой системы.

Ниже приводится разъяснение различных флагов FL_*.

• FS_APPEND_FL — файл можно открыть для записи, только если установлен флаг O_APPEND (таким образом все обновления файла принудительно добавляются в его конец). Этот флаг можно использовать, например, для файла журнала. Устанавливать данный флаг могут только привилегированные (CAP_LINUX_IMMUTABLE) процессы.

• FS_COMPR_FL — хранить файл на диске в сжатом формате. Данная функция не реализована в стандартном виде ни в одной из основных файловых систем Linux. (Существуют версии, в которых она реализована для систем ext2 и ext3.) С учетом малой стоимости хранения на диске, избыточной нагрузки на ЦПУ при сжатии и распаковке, а также в связи с тем, что сжатие файла означает, что он перестает быть простым объектом с произвольным доступом к содержимому файла (с помощью функции lseek()), для многих приложений сжатие файла является нежелательным.

Перейти на страницу:

Похожие книги