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
]$
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 실행 시 긴 이름의 옵션 사용 함수 getopt_long_only() (0) | 2020.03.18 |
---|---|
C언어 파일 디스크립터 복사본 만들기 함수 dup() (0) | 2020.03.18 |
C언어 파일을 지정한 크기로 변경 ftruncate() (0) | 2020.03.18 |