Linux/C/C++
dup2() 파일 디스크립터 복사본 만들기
bluebamus
2012. 7. 11. 15:55
설명 |
파일 디스크립터 복사본을 만듭니다. 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
]$ | |