dup2

 Функция            Дублирует дескриптор файла.

 Синтаксис          #include
                    int dup2(int oldhandle, int newhandle);

 Файл, содержащий   io.h
 прототип

 Описание           Функция dup2 возвращают дескриптор файла, который
                    по следующим позициям совпадает с оригинальным
                    дескриптором:

                    - тот же самый открываемый файл или устройство;

                    - тот же самый адресный указатель файла (то есть
                    изменение одного адресного указателя приводит к
                    изменению другого);

                    -тот же самый метод доступа (чтение, запись, чте-
                    ние/запись).

                    dup2 создает новый дескриптор со значением
                    newhandle Если файл связанный с дескриптором
                    newhandle открыт, то при вызове dup2 он закрывает-
                    ся.

                    Переменная newhandle и oldhandle - это дескрипторы
                    файлов, и получают значения при вызове функций
                    creat,_creat,_open, open, dup, dup2.

 Возвращаемое       При успешном завершении функция dup2 возвращает 0,
 значение           в противном случае функция dup2 возвращает значе-
                    ние -1.

                    При возникновении ошибки глобальная переменная
                    errno получает одно из следующих значений:

                      EMFILE - Слишком много открытых файлов.
                      EBADF  - Неверный номер файла.

 Переносимость      Функция dup поддерживается на системах UNIX, кроме
                    system III.

 Смотрите также     _close close _creat creat creatnew creattemp
                    dup, fopen _open open

 Пример:

 #include
 #include
 #include
 #include
 #include
 #define STDOUT 1

 int main(void)
 {
    int fptr,oldstdout;
    char msg[] = "Тестовый пример";
    /* создание файла */
    fptr = open("DUMMY.FIL",O_CREAT|O_RDWR,S_IREAD|S_IWRITE);
    if(fptr)
    {
       /* создать дополнительный дескриптор для stdout */
       oldstdout = dup(STDOUT);
       /* перенаправить стандартный вывод в файл, путем
          дублирования его дескриптора */
       dup2(fptr,STDOUT);
       /* закрыть файл */
       close(fptr);
       /* было перенаправлено в DUMMY.FIL */
       write(STDOUT,msg,strlen(msg));
       /* восстановить исходный дескриптор stdout */
       dup2(oldstdout,STDOUT);
       /* закрыть второй дескриптор stdout */
       close(oldstdout);
    }
    else
    {
       printf("Ошибка при открытии файла. \n");
    }
    return 0;
 }