Книга: Разработка приложений в среде Linux. Второе издание
22.3.7. Закрытие файловых дескрипторов
22.3.7. Закрытие файловых дескрипторов
В системах Linux и Unix файловые дескрипторы, как правило, наследуются через системные вызовы exec()
(и всегда наследуются через fork()
и vfork()
). В большинстве случаев такое поведение нежелательно, поскольку только разделяться должны только stdin, stdout и stderr. Программы, запускаемые привилегированным процессом, не должны иметь доступа к файлам через унаследованный файловый дескриптор. Поэтому очень важно, чтобы программы внимательно закрывали все файловые дескрипторы, к которым не должна получить доступ новая программа. Это может стать проблемой, если ваша программа вызывает библиотечные функции, которые открывают файлы и не закрывают их. Одним из методов закрытия файловых дескрипторов является закрытие всех файловых дескрипторов вслепую из дескриптора номер 3 (тот, который следует сразу за stderr) произвольным большим значением (скажем, 100 или 1024)[165]. В большинстве программ это обеспечивает закрытие всех надлежащих файловых дескрипторов[166].
Наиболее удобным способом является установка флага закрытия после выполнения для каждого файла, который программа оставляет открытым на длительный период времени (включая сокеты и файловые устройства), что предотвращает получение доступа к данным файлам новыми запускаемыми программами. Описание флага закрытия после выполнения можно найти в главе 11.
- 8.1. Монтирование и демонтирование файловых систем
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- 11.5. Закрытие месяца
- 5.14 МОНТИРОВАНИЕ И ДЕМОНТИРОВАНИЕ ФАЙЛОВЫХ СИСТЕМ
- Глава десятая. Из истории файловых систем
- Максимальное число дескрипторов для функции select
- Общие сведения о файловых менеджерах
- 4.6. Создание файловой системы. Типы файловых систем
- 6.3. Создание, открытие, закрытие, сохранение и печать документов
- 5.11.4. Монтирование файловых систем при загрузке Linux
- 4.4.2. Открытие и закрытие файлов