Книга: Linux программирование в примерах
9.4.3.2. Дублирование дескриптора файла
9.4.3.2. Дублирование дескриптора файла
Когда аргумент cmd
функции fcntl()
равен F_DUPFD
, ее поведение похоже, но не идентично поведению dup2()
. В этом случае arg
является дескриптором файла, представляющим наименьшее приемлемое значение для нового дескриптора файла:
int new_fd = fcntl(old_fd, F_DUPFD, 7);
/* Возвращаемое значение между 7 и максимумом или неудача */
int new_fd = dup2(old_fd, 7);
/* Возвращаемое значение 7 или неудача */
Вы можете имитировать поведение dup()
, которая возвращает наименьший свободный дескриптор файла, использовав 'fcntl(old_fd, F_DUPED, 0)
'.
Если вы помните, что дескрипторы файлов являются просто индексами внутренней таблицы, работа этой функции должна быть ясна. Третий аргумент просто предоставляет индекс, с которого ядро должно начать поиск неиспользуемого дескриптора файла.
Использовать ли в собственном коде fcntl()
с F_DUPED
или dup()
или dup2()
, в значительной степени является делом вкуса. Все три функции API являются частью POSIX и широко поддерживаются. У нас легкое пристрастие к dup()
и dup2()
, поскольку они более специфичны в своих действиях, поэтому являются самодокументирующимися. Но поскольку все они довольно просты, эта аргументация может вас не убедить.
- 9.4. Управление дескрипторами файлов
- 9.4.3. Управление атрибутами файла: fcntl()
- Дублирование против связанной копии
- Эффективная работа с временными файлами сортировки
- Единое имя файла параметров InterBase
- Параметры конфигурационного файла InterBase
- 13. Зарабатываем на своих файлах: файлообменники, загружаеми получаем процент за скачивание
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Создание и открытие файла
- Управление файлами занятий
- Как изменить имя файла или папки?
- Как создавать комментарии к файлам?