본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 파일 디스크립터 복사본 만들기 함수 dup2()

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

· 댓글개 · 바다야크

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

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

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

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

C언어 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 = 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;
}

C언어 dup2() 예제 실행 결과

]$ ./a.out
fd_wr= 3  fd_rd= 100
badayak.com
]$
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.