Читаем Linux API. Исчерпывающее руководство полностью

Внутри программы флаги индексного дескриптора можно извлечь и изменить с помощью операций ioctl() FS_IOC_GETFLAGS и FS_IOC_SETFLAGS. (Эти константы определены в файле .) Следующий код демонстрирует способ установки флага FS_NOATIME_FL для файла, определяемого по открытому файловому дескриптору fd:

int attr;

if (ioctl(fd, FS_IOC_GETFLAGS, &attr) == -1) /* Извлечь текущие флаги */

errExit("ioctl");

attr |= FS_NOATIME_FL;

if (ioctl(fd, FS_IOC_SETFLAGS, &attr) == -1) /* Обновить флаги */

errExit("ioctl");

Для изменения флагов индексного дескриптора файла необходимо, чтобы действующий UID для процесса соответствовал идентификатору пользователя (владельца) файла, либо чтобы процесс был привилегированным (CAP_FOWNER). (Если говорить абсолютно точно, то в Linux для непривилегированного процесса идентификатор пользователя в файловой системе процесса, а не его действующий UID должен совпадать с идентификатором пользователя файла, как сказано в разделе 9.5.)


15.6. Резюме


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

Программа может обновить время последнего доступа к файлу и время его последнего изменения, выполнив системные вызовы utime(), utimes() или другие подобные интерфейсы.

Каждый файл имеет относящиеся к нему идентификаторы пользователя (владельца) и группы, а также набор битов прав доступа. Для организации прав доступа пользователи файла распределены по трем категориям: владелец (известный также как пользователь), группа и остальные. Каждой категории могут быть предоставлены следующие права доступа: чтение, запись и выполнение. Эта же схема используется для каталогов, хотя для них биты прав доступа имеют немного другое значение. Системные вызовы chown() и chmod() меняют принадлежность и права доступа к файлу. Системный вызов umask() задает маску битов прав доступа, которые всегда отключаются, когда вызывающий процесс создает файл.

Для файлов и каталогов задействуют три дополнительных бита прав доступа. Биты set-user-ID и set-group-ID можно применить к программным файлам, чтобы создать программы, которые вызывают появление у выполняющегося процесса привилегий, отличающихся от привилегий программного файла за счет присвоения другого идентификатора пользователя или группы. Для каталогов, расположенных в файловых системах, смонтированных с параметром nogrpid (sysvgroups), бит set-group-ID можно использовать для контроля над тем, откуда будут наследовать GID новые файлы, создаваемые в данном каталоге: от действующего GID для процесса или же от GID для родительского каталога. Применительно к каталогам бит закрепления действует как флаг, запрещающий удаление.

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


15.7. Упражнения


15.1. Раздел 15.4 содержит несколько утверждений о правах доступа, необходимых для различных операций в файловой системе. Воспользуйтесь командами оболочки или напишите программы, чтобы проверить или получить ответ на следующее:

1) при удалении всех прав доступа владельца к файлу такой файл не разрешает доступ для владельца, хотя у группы и у остальных пользователей доступ все же сохраняется;

2) в каталоге, для которого есть разрешение на чтение, но нет разрешения на выполнение, можно вывести имена файлов, однако к самим файлам доступа нет вне зависимости от прав, назначенных им;

3) какие права доступа необходимы для родительского каталога и для самого файла, чтобы иметь возможность создать новый файл, открыть файл для чтения, открыть файл для записи или удалить файл? Какие права доступа необходимы для исходного и целевого каталогов при переименовании файла? Если при переименовании уже существует целевой файл, какие права доступа необходимы для него? Как установка закрепляющего бита (chmod +t) для каталога повлияет на операции переименования и удаления?

15.2. Как вы думаете, изменится ли какая-либо из трех меток времени файла после выполнения системного вызова stat()? Если нет, объясните почему.

15.3. На компьютере, работающем под Linux 2.6, измените программу, приведенную в листинге 15.1 (t_stat.c) так, чтобы метки времени файла отображались с наносекундной точностью.

15.4. Системный вызов access() проверяет права доступа, используя реальные идентификаторы пользователя и группы для процесса. Напишите соответствующую функцию, которая выполняет такие проверки на основе действующих UID и GID для процесса.

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

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

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных