В современных версиях BSD подобная функция флагов индексного дескриптора реализована в виде указания флагов файла с помощью команд chflags(1) и chflags(2).
Первой файловой системой Linux, которая стала поддерживать флаги индексного дескриптора, оказалась ext2, и поэтому такие флаги иногда называют
Количество флагов индексного дескриптора немного различается для разных файловых систем. Чтобы использовать флаги индексного дескриптора в системе Reiserfs, необходимо при ее монтировании указать параметр mount — o attrs.
Напрямую из оболочки флаги индексного дескриптора можно установить и просмотреть с помощью команд chattr и lsattr, как показано в следующем примере:
$ lsattr myfile
— myfile
$ chattr +ai myfile
$ lsattr myfile
— ia- myfile
Внутри какой-либо программы флаги индексного дескриптора можно извлечь и изменить с помощью системного вызова ioctl(), что будет подробно описано ниже.
Основная часть флагов индексного дескриптора предназначена для использования с обычными файлами, хотя некоторые из этих флагов можно задействовать также (или только) и для каталогов. В табл. 15.6 приведены доступные флаги. Указано соответствующее имя флага (оно определено в файле
Таблица 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, не определялись в файле
Ниже приводится разъяснение различных флагов FL_*.
• FS_APPEND_FL — файл можно открыть для записи, только если установлен флаг O_APPEND (таким образом все обновления файла принудительно добавляются в его конец). Этот флаг можно использовать, например, для файла журнала. Устанавливать данный флаг могут только привилегированные (CAP_LINUX_IMMUTABLE) процессы.
• FS_COMPR_FL — хранить файл на диске в сжатом формате. Данная функция не реализована в стандартном виде ни в одной из основных файловых систем Linux. (Существуют версии, в которых она реализована для систем ext2 и ext3.) С учетом малой стоимости хранения на диске, избыточной нагрузки на ЦПУ при сжатии и распаковке, а также в связи с тем, что сжатие файла означает, что он перестает быть простым объектом с произвольным доступом к содержимому файла (с помощью функции lseek()), для многих приложений сжатие файла является нежелательным.