Книга: Linux программирование в примерах
14.2.2.3. Предостережения по поводу блокировок
14.2.2.3. Предостережения по поводу блокировок
Имеется несколько предостережений, о которых нужно знать при блокировках файлов:
• Как описано ранее, вспомогательная блокировка является именно этим. Не взаимодействующий процесс может делать все, что хочет, за спиной (так сказать) процесса, осуществляющего блокировку.
• Эти вызовы не следует использовать в сочетании с библиотекой <stdio.h>
. Эта библиотека осуществляет свое собственное буферирование. Хотя вы можете получить с помощью fileno()
дескриптор нижележащего файла, действительное положение в файле может быть не там, где вы думаете. В общем, стандартная библиотека ввода/вывода не понимает блокировок файлов.
• Держите в уме, что блокировки после fork
не наследуются порожденными процессами, но они остаются на своем месте после exec
.
• Вызов close()
с любым открытым для файла дескриптором удаляет все блокировки файла процессом, даже если другие дескрипторы для файла остаются открытыми.
То, что close()
работает таким образом, является неудачным, но поскольку так была реализована первоначальная блокировка в fcntl()
, POSIX ее стандартизует. Стандартизация такого поведения позволяет избежать порчи существующего кода для Unix.
- НЕВОЗМУТИМОСТЬ. Не раздражайтесь, даже по самому важному поводу
- Блокировки и конфликты блокировок
- Звонок по поводу оплаты
- Письма «по поводу»
- 1.4.5. Заключительные соображения по поводу «GNU Coding Standards»
- 10.4.6. Дополнительные предостережения
- 12.5.3. Важные предостережения
- 14.2.2.2. Установка и снятие блокировок
- 14.3.2. Дополнительные замечания по поводу библиотеки shell.rb
- Сравнение спин-блокировок и семафоров
- Комментарии по поводу реализации объекта порогового барьера
- Комментарии по поводу функций управления очередью с точки зрения производительности