C언어 파일 디스크립터 복사본 만들기 함수 dup()

2020. 3. 18. 07:00 컴퓨터/프로그래밍

C함수 파일 디스크립터 복사본 만들기 dup()

파일 디스크립터 복사본을 만듭니다. 원본 디스크립터와 복사된 디스크립터의 읽기/쓰기 포인터는 공유됩니다. 즉, 원본과 복사본 디스크립터마다 따로 읽기/쓰기 포인터가 존재하지 않습니다.

  • 헤더: unistd.h
  • 형태: int dup(int fildes)
  • 인수: int fildes 파일 디스크립터
  • 반환: int 복사된 파일 디스크립터 번호로 사용되지 않은 가장 작은 번호가 자동으로 지정되어 반환됩니다. 함수 실행이 실패되면 -1 이 반환됩니다.
caution

파일 디스크립터 복사본을 만드는 함수로는 dup()와 dup2()이 있습니다. dup()는 사용하지 않는 디스크립터 번호 하나가 자동으로 지정되지만 dup2()는 프로그래머가 원하는 번호로 지정할 수 있습니다. 지정한 번호가 이미 사용하는 번호라면 자동으로 그 파일을 닫고 다시 지정해 줍니다.

예제

#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   = "badayak.com";

   fd_wr = open( "./test.txt", O_RDWR | O_CREAT | O_TRUNC, 0644);
   fd_rd = dup( fd_wr);

   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
badayak.com
]$


이 댓글을 비밀 댓글로