Dup (системный вызов) - Википедия - dup (system call)
Эта статья нужны дополнительные цитаты для проверка.Март 2012 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В Unix-подобный операционные системы, обман (сокращение от «дубликат») и dup2 системные вызовы создать копию данного дескриптор файла. Этот новый дескриптор на самом деле ведет себя не как копия, а как псевдоним старого.
Определение POSIX библиотеки C
Вызовы dup и dup2 стандартизированы POSIX Технические характеристики.[1]
int обман (int oldfd);int dup2 (int oldfd, int newfd);
Первый выделяет первый доступный дескриптор, как и открыто() ведет себя; альтернативный способ скопировать дескриптор файла в неуказанное место - это fcntl системный вызов с F_DUPFD
команда.
Последний помещает копию в newfd. Если newfd открыт, это закрыто первый.
dup2 для перенаправления ввода / вывода
Эта секция нуждается в расширении. Вы можете помочь добавляя к этому. (Март 2012 г.) |
Оболочки Unix использовать dup2 для ввода / вывода перенаправление. Вместе с трубка()
, это инструмент, на котором Unix каналы полагаться.
В следующем примере используется трубка()
и dup ()
чтобы соединить два отдельных процесса (program1 и программа2) с помощью Unix каналы:
#включают <stdio.h>#включают <stdlib.h>#включают <unistd.h>/ * прототипы функций * /пустота умереть(const char*); int главный(int argc, char **argv) { int pdes[2]; pid_t ребенок; если(трубка(pdes) == -1) умереть("трубка()"); ребенок = вилка(); если(ребенок == (pid_t)(-1)) умереть("вилка()"); / * вилка не удалась * / если(ребенок == (pid_t)0) { / * дочерний процесс * / Закрыть(1); / * закрываем стандартный вывод * / если(обман(pdes[1]) == -1) умереть("dup ()"); / * теперь stdout и pdes [1] эквивалентны (dup возвращает самый низкий свободный дескриптор) * / если((execlp("программа1", "программа1", "arg1", НОЛЬ)) == -1) умереть("execlp ()"); _выход(EXIT_SUCCESS); } еще { / * родительский процесс * / Закрыть(0); / * закрываем стандартный ввод * / если(обман(pdes[0]) == -1) умереть("dup ()"); / * теперь stdin и pdes [0] эквивалентны (dup возвращает самый низкий свободный дескриптор) * / если((execlp("программа2", "программа2", "arg1", НОЛЬ)) == -1) умереть("execlp ()"); выход(EXIT_SUCCESS); } возвращаться 0;}пустота умереть(const char *сообщение) { перрор(сообщение); выход(EXIT_FAILURE);}
Смотрите также
- Дескриптор файла - как это работает и другие функции, связанные с открытием
Рекомендации
- ^ "dup, dup2". opengroup.org.
- Расширенное программирование в среде UNIX У. Ричард Стивенс ISBN 81-7808-096-6