Роббинс Арнольд
Шрифт:
9.4. Управление дескрипторами файлов
На данный момент части загадки почти полностью составлены,
Системные вызовы
9.4.1. Дублирование открытых файлов:
Два системных вызова создают копию открытого дескриптора файла:
Функции следующие:
Возвращает наименьшее значение неиспользуемого дескриптора файла; это копия
Делает
Рис. 9.4. Разделение дескриптора файла как результат '
На этом рисунке процесс выполнил '
В разделе 4.4.2 «Открытие и закрытие файлов» мы упомянули, что
При наличии правила «возвращения наименьшего неиспользуемого номера» в сочетании с функцией
1. Создать канал с помощью
2. Создать то, что мы называем «левым потомком». Это процесс, стандартный вывод которого идет в канал. В данном процессе сделать следующее:
a. Использовать '
b. Использовать '
c. Использовать '
d. Использовать '
e. Выполнить
3. Создать то, что мы называем «правым потомком». Это процесс, стандартный ввод которого поступает из канала. Шаги для этого потомка являются зеркальным отражением шагов для левого потомка:
a. Использовать '
b. Использовать '
c. Использовать '
d. Использовать '
e. Выполнить
4. В родителе закрыть оба конца канала — '
5. Наконец, использовать в родителе
Обратите внимание, как важно закрыть неиспользуемые копии дескрипторов файлов каналов. Как мы отмечали ранее, файл не закрывается до тех пор, пока не будет закрыт последний открытый для него дескриптор. Это верно, даже если дескрипторы файлов разделяют несколько процессов. Закрытие не использующихся дескрипторов файлов имеет значение, поскольку процесс, читающий из канала, не получит указания конца файла, пока все копии записываемого конца не будут закрыты.