
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Навигация:
Главная Случайная страница Обратная связь ТОП Интересно знать Избранные Новые материалы
Топ:
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Дисциплины:
![]() |
![]() |
5.00
из
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
Имеется несколько предостережений, о которых нужно знать при блокировках файлов:
• Как описано ранее, вспомогательная блокировка является именно этим. Не взаимодействующий процесс может делать все, что хочет, за спиной (так сказать) процесса, осуществляющего блокировку.
• Эти вызовы не следует использовать в сочетании с библиотекой. Эта библиотека осуществляет свое собственное буферирование. Хотя вы можете получить с помощью дескриптор нижележащего файла, действительное положение в файле может быть не там, где вы думаете. В общем, стандартная библиотека ввода/вывода не понимает блокировок файлов.
• Держите в уме, что блокировки после не наследуются порожденными процессами, но они остаются на своем месте после.
• Вызов с любым открытым для файла дескриптором удаляет все блокировки файла процессом, даже если другие дескрипторы для файла остаются открытыми.
То, что работает таким образом, является неудачным, но поскольку так была реализована первоначальная блокировка в, POSIX ее стандартизует. Стандартизация такого поведения позволяет избежать порчи существующего кода для Unix.
Блокирование BSD:
4.2 BSD представило свой собственный механизм блокировки, [155]. Функция объявлена следующим образом:
Дескриптор представляет открытый файл. Имеются следующие операции:
Создает совместную блокировку. Может быть несколько совместных блокировок.
Создает исключительную блокировку. Может быть лишь одна такая блокировка.
Удаляет предыдущую блокировку.
При использовании побитового ИЛИ с или позволяет избежать блокирования функции, если блокировка файла невозможна.
По умолчанию запросы блокировки файла будут блокировать функцию (не давать ей вернуться), если существует конкурирующая блокировка. Запрашивающая функция возвращается, когда конкурирующая блокировка файла снимается и осуществляется запрошенная функцией блокировка файла. (Это предполагает, что по умолчанию имеется возможность возникновения тупика.) Чтобы попытаться заблокировать файл без блокирования функции, добавьте посредством побитового ИЛИ значение к имеющемуся значению.
Отличительными моментами являются следующие:
• Блокировка с помощью является вспомогательной; программа, не использующая блокировку, может прийти и испортить без всяких сообщений об ошибках файл, заблокированный с помощью.
• Блокируется весь файл. Нет механизма для блокировки только части файла.
• То, как был открыт файл, не влияет на тип блокировки, который может быть использован. (Сравните это с, при использовании которой файл должен быть открыт для чтения для получения блокировки чтения, или для записи для блокировки записи.)
• Несколько открытых для одного и того же файла дескрипторов используют совместную блокировку. Для удаления блокировки может использоваться любой из них. В отличие от, когда нет явного разблокирования, блокировка не удаляется до тех пор, пока не будут закрыты все открытые дескрипторы файла.
• Процесс может иметь лишь одну блокировку файла с помощью; последовательный вызов с двумя различными типами блокировок изменяет тип блокировки на новый.
• На системах GNU/Linux блокировки совершенно независимы от блокировок. Многие коммерческие системы Unix реализуют в виде «оболочки» поверх, но их семантика различается.
Мы не рекомендуем использовать в новых программах, поскольку ее семантика не такая гибкая и поскольку она не стандартизована POSIX. Поддержка ее в GNU/Linux осуществляется главным образом для обратной совместимости с программным обеспечением, написанным для старых систем BSD Unix.
ЗАМЕЧАНИЕ. Справочная страница GNU/Linux flock (2) предупреждает, что блокировки не работают для смонтированных удаленных файлов. Блокировки работают, при условии, что у вас достаточно новая версия Linux и сервер NFS поддерживает блокировки файлов
Обязательная блокировка
Большинство коммерческих систем Unix поддерживают в дополнение к вспомогательной обязательную блокировку файлов. Обязательная блокировка работает лишь с. Обязательная блокировка файла контролируется установками прав доступа файла, в частности, путем добавления к файлу бита setgid с помощью команды.
echo hello, world > myfile
ls ‑l myfile
chmod g+s myfile
ls ‑l myfile
Бит права на исполнение группой должен быть оставлен сброшенным. показывает, что бит setgid установлен, но что бит права на исполнение – нет; если бы были установлены оба бита, была бы использована строчная буква.
Комбинация установленного бита setgid и сброшенного бита права на исполнение группой обычно бессмысленно. По этой причине, она была выбрана разработчиками System V для обозначения «использования обязательного блокирования». И в самом деле, добавления этого бита достаточно, чтобы заставить коммерческую систему Unix, такую как Solaris, использовать блокировку файлов.
На системах GNU/Linux несколько другая история. Для обязательных блокировок файл должен иметь установленный бит setgid, но этого одного недостаточно. Файловая система, содержащая файл, также должна быть смонтирована с опцией в команде.
Мы уже рассмотрели файловые системы, разделы диска, монтирование и команду mount, главным образом, в разделе 8.1 «Монтирование и демонтирование файловых систем». Мы можем продемонстрировать обязательную блокировку с помощью небольшой программы и файловой системой для тестирования на гибком диске. Для начала, вот программа:
Программа устанавливает права доступа и создает файл, указанный в командной строке (строки 25 и 26). Затем она записывает в файл некоторые данные (строка 34). Строка 41 добавляет к правам доступа бит setgid, а строка 43 изменяет их. (Системный вызов обсуждался в разделе 5.5.2 «Изменение прав доступа: и».)
Строки 51–55 устанавливают для блокировки всего файла, а затем блокировка осуществляется реально в строке 57. Выполнив блокировку, программа засыпает, используя системный вызов (см. раздел 10.7 «Сигналы для межпроцессного взаимодействия»). После этого программа закрывает дескриптор файла и завершается. Вот расшифровка с комментариями, демонстрирующая использование обязательной блокировки файлов:
Fdformat /dev/fd0
/sbin/mke2fs /dev/fd0
su
mount ‑t ext2 ‑о mand /dev/fd0 /mnt/floppy
Suspend
ch14‑lockall /mnt/floppy/x &
ls ‑l /mnt/floppy/x
echo something > /mnt/floppy/x
kill %2
echo something > /mnt/floppy/x
fg
Umount /mnt/floppy
Exit
Пока выполняется, она владеет блокировкой. Поскольку это обязательная блокировка, перенаправления ввода/вывода оболочки завершаются неудачей. После завершения блокировки освобождаются, и перенаправление ввода/вывода достигает цели. Как упоминалось ранее, под GNU/Linux даже не может аннулировать обязательную блокировку файла.
Немного отклоняясь в сторону, гибкие диски представляют отличный испытательный стенд для изучения того, как использовать инструменты, работающие с файловыми системами. Если вы сделаете что‑то, что разрушит данные на гибком диске, это вряд ли будет катастрофическим, тогда как экспериментирование с действующими разделами на обычных жестких дисках значительно более рискованно.
Более точное время
Системный вызов и тип представляют время в секундах в формате отсчета с начала Эпохи. Разрешения в одну секунду на самом деле недостаточно, сегодняшние машины быстры, и часто бывает полезно различать временные интервалы в долях секунды. Начиная с 4.2 BSD, Berkley Unix представил ряд системных вызовов, которые сделали возможным получение и использование времени в долях секунд. Эти вызовы доступны на всех современных системах Unix, включая GNU/Linux.
Время в микросекундах:
Первой задачей является получение времени дня:
позволяет получить время дня.[156] В случае успеха возвращается 0, при ошибке ‑1. Аргументы следующие:
Этот аргумент является указателем на, которая вскоре будет описана и в которую система помещает текущее время.
Это аргумент больше не используется; он имеет тип, поэтому он всегда должен равняться. (Справочная страница описывает, для чего он использовался, а затем утверждает, что он устарел. Прочтите, если интересуетесь подробностями.)
Время представлено структурой:
Значение представляет секунды с начала Эпохи; является числом микросекунд в секунде.
Справочная страница GNU/Linux gettimeofday (2) документирует также следующие макросы:
Эти макросы работают со значениями; то есть указателями на структуры, и их использование должно быть очевидным из их названий и кода. Особенно интересен макрос: третьим аргументом является оператор сравнения для указания вида сравнения. Например, рассмотрим определение того, является ли одна меньше другой:
Макрос развертывается в
Это значит: «если меньше, чем, ИЛИ если они равны и меньше, чем, тогда…».
|
|
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
© cyberpedia.su 2017-2025 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!