-
Notifications
You must be signed in to change notification settings - Fork 1
dup
ChoYG edited this page Aug 4, 2016
·
1 revision
이전에 언급한 하드링크와 비슷하다면 비슷한 느낌이다. 파일 디스크립터 fd1을 만들고, fd1은 파일1을 가리킨다고 하자. 그런대 fd2 도 파일1을 가리키게 하고 싶다면? 뭐 이런 것들을 하고싶다는 소리다.
쉽게 말해 파일 디스크립터를 복사하겠다는 소리
dup(원래 파일 디스크립터)리턴값은 '원래 파일 디스크립터'와 같은 정보를 가리키는 파일 디스크립터다.
dup2(파일 디스크립터1, 파일 디스크립터2)'파일 디스크립터1' 이 가리키는 정보를, 파일 디스크립터2도 가리키게 된다.
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int fd1, fd2, fd3;
char c1, c2, c3;
char *fname = argv[1];
fd1 = open(fname, O_RDONLY);
fd2 = open(fname, O_RDONLY);
fd3 = open(fname, O_RDONLY);
dup2(fd2, fd3);
read(fd1, &c1, 1);
read(fd2, &c2, 1);
read(fd3, &c3, 1);
printf("c1 = %c, c2 = %c, c3 = %c", c1, c2, c3);
return 0;
}./dup2 data.txt
c1 = a, c2 = a, c3 = b%
data.txt에는 "abcde" 라는 정보가 저장되어있다.
fd2와 fd3은 같은 정보를 가리키게 된다. 쉽게말해 fd2와 fd3는 사실상 같은 파일 디스크립터다.
- 첫번째 read 에서 fd1 를 읽을 때, data.txt의 첫번째 데이터를 읽는다.
- 두번째 read 에서 fd2 를 읽을 때, data.txt의 첫번째 데이터를 읽는다.
- 세번째 read 에서 fd3 를 읽을 때, fd2를 읽을때 읽기/쓰기 위치 포인터가 이동했으므로 두번째 데이터를 읽는다. 그래서 출력은 a, a, b 순서대로 출력된다.
read(fd1, &c1, 1);
read(fd2, &c2, 1);
read(fd3, &c3, 1);이 구문을
read(fd1, &c1, 1);
read(fd2, &c2, 1);
read(fd2, &c3, 1); //fd2 로 변경해봄와 같이 바꾼 후 출력 결과를 보면 dup2 가 어떤 역할을 하는지 이해할 수 있을 것이다.
