Книга: Операционная система UNIX
Функции dup(2) и dup2(2)
Функции dup(2) и dup2(2)
Функция dup(2) используется для дублирования существующего файлового дескриптора:
int dup(int fildes);
Файловый дескриптор fildes
должен быть предварительно получен с помощью функций open(2), creat(2), dup(2), dup2(2) или pipe(2). В случае успешного завершения функции dup(2) возвращается новый файловый дескриптор, свойства которого идентичны свойствам дескриптора fildes
. Оба указывают на один и тот же файл, одно и то же смещение, начиная с которого будет производиться следующая операция чтения или записи (файловый указатель), и определяют один и тот же режим работы с файлом. Правило размещения нового файлового дескриптора аналогично используемому в функции open(2).
Функция dup2(2) делает то же самое, однако позволяет указать номер файлового дескриптора, который требуется получить после дублирования:
int dup2(int fildes, int fildes2);
Файловый дескриптор, подлежащий дублированию, передается в первом аргументе (fildes
), а новый дескриптор должен быть равен fildes2
. Если дескриптор fildes2
уже занят, сначала выполняется функция close(fildes2)
.
В качестве примера использования системного вызова dup2(2) рассмотрим вариант реализации слияния потоков в командном интерпретаторе shell:
$ runme >/tmp/file1 2>&1
Фрагмент кода
...
/* Закроем ассоциацию стандартного потока вывода (1)
с файлом (терминалом) */
close(1);
/* Назначим стандартный поток вывода в файл
/tmp/file1 (fd==1) */
fd = open("/tmp/file1", O_WRONLY | O_CREAT | O_TRUNC);
/* Выполним слияние потоков */
dup2(fd, 2);
...
- Листинг 5.8. (dup2.c) Перенаправление выходного потока канала с помощью функции dup2()
- duplicateMovieClip - Создать копию клипа
- Сигналы Posix: функции типа Async-Signal-Safe
- 8.4. Функции как данные
- Аргументы функции в Python
- 3. Функции
- Новые функции API для работы с Blob и массивами
- Математические функции
- Размытые функции
- 7.3. Финансовые функции
- 4.3. Логические функции и таблицы истинности
- B1.7. Функции обработки ошибок