설명

파일 디스크립터 복사본을 만듭니다. dup()는 커널에서 알아서 사용하지 않는 디스크립터 번호 중에 하나가 자동으로 지정되지만 dup2()는 프로그래머가 원하는 번호로 지정할 수 있습니다.

프로그래머가 지정하는 번호가 이미 사용하는 번호라면 dup2()는 자동으로 그 파일을 닫고 다시 지정해 줍니다.

헤더 unistd.h
형태 int dup2(int fildes, int fildes2);
인수 int fildes 파일 디스크립터
  int fildes2 원하는 파일 디스크립터 번호
반환 int 원하는 파일 디스크립터 번호, 실패하면 -1 이 반환됩니다.
예제
#include <stdio.h>         // puts()
#include <string.h>        // strlen(), memset()
#include <fcntl.h>         // O_RDWR, O_CREAT
#include <unistd.h>        // write(), close(), dup()

#define  BUFF_SIZE   1024

int main()
{
   int   fd_wr;
   int   fd_rd;
   char  buff[BUFF_SIZE];
   char *str   = "forum.falinux.com";

   fd_wr = open( "./test.txt", O_RDWR ¦ O_CREAT ¦ O_TRUNC, 0644);
   fd_rd = dup2( fd_wr, 100);
   printf( "fd_wr= %d  fd_rd= %d\n", fd_wr, fd_rd);          // 디스크립터 번호 확인

   write(  fd_wr, str, strlen( str));
   close( fd_wr);                        // fd_wr 닫음

   lseek( fd_rd, 0, SEEK_SET);
   memset( buff, '\0', BUFF_SIZE);
   read( fd_rd, buff, BUFF_SIZE);

   printf( "%s\n", buff);

   close( fd_rd);                        // fd_rd 닫음

   return 0;
}
]$ ./a.out
fd_wr= 3  fd_rd= 100
forum.falinux.com
]$