Книга: Архитектура операционной системы UNIX
5.12.4 Закрытие каналов
5.12.4 Закрытие каналов
При закрытии канала процесс выполняет ту же самую процедуру, что и при закрытии обычного файла, за исключением того, что ядро, прежде чем освободить индекс канала, выполняет специальную обработку. Оно уменьшает количество процессов чтения из канала или записи в канал в зависимости от типа файлового дескриптора. Если значение счетчика числа записывающих в канал процессов становится равным 0 и имеются процессы, приостановленные в ожидании чтения данных из канала, ядро возобновляет выполнение последних и они завершают свои операции чтения без возврата каких-либо данных. Если становится равным 0 значение счетчика числа считывающих из канала процессов и имеются процессы, приостановленные в ожидании возможности записи данных в канал, ядро возобновляет выполнение последних и посылает им сигнал (глава 7) об ошибке. В обоих случаях не имеет смысла продолжать держать процессы приостановленными, если нет надежды на то, что состояние канала когда-нибудь изменится. Например, если процесс ожидает возможности производить чтение из непоименованного канала и в системе больше нет процессов, записывающих в этот канал, значит, записывающий процесс никогда не появится. Несмотря на то, что если канал поименованный, в принципе возможно появление нового считывающего или записывающего процесса, ядро трактует эту ситуацию точно так же, как и для непоименованных каналов. Если к каналу не обращается ни один записывающий или считывающий процесс, ядро освобождает все информационные блоки канала и переустанавливает индекс таким образом, чтобы он указывал на то, что канал пуст. Когда ядро освобождает индекс обычного канала, оно освобождает для переназначения и дисковую копию этого индекса.
- 11.5. Закрытие месяца
- Использование каналов RSS
- Ключевые факторы успешного отбора каналов коммуникаций
- Просмотр веб-каналов
- Интегрирование каналов рекламы
- 6.3. Создание, открытие, закрытие, сохранение и печать документов
- Функции транзакций именованных каналов
- 11.4.1. Создание входных точек устройств и именованных каналов
- 4.4.2. Открытие и закрытие файлов
- 4.4.2.2. Закрытие всех открытых файлов
- 9.3.1.1. Создание каналов
- 9.3.1.2. Буферирование каналов