[Linux] dup(), dup2()

gyeong·2020년 10월 6일
0

Linux

목록 보기
7/8
post-custom-banner

dup() && dup2()

리눅스 시스템에서는 열려진 file descriptor를 복제하는 함수를 제공한다.

✔️ header

#include <unistd.h>

✔️ prototype

int dup(int oldfd);

int dup2(int oldfd, int newfd);

반환 값: 새로운 파일 디스크립터, 실패 시 -1

✔️ description

dup, dup2함수는 argument로 열린 file descriptor를 전달하면 같은 물리적 파일을 가리키는 새로운 file descriptor를 반환한다.

dup는 argument로 전달받은 file descriptor를 반환한다.
dup2는 새 file descriptor를 두 번째 argument(newfd2)로 설정한다.

즉 이 함수를 통해 새로운 file descriptor를 생성하면 기존의 file descriptor와 같은 파일 테이블 엔트리를 참조하게 된다.
참고로 작업 중이던 파일의 offset은 파일 엔트리에 저장되는 정보이므로, 두 개의 file descriptor가 접근하는 파일 작업의 offset은 같다.

✔️ use case


/* dup example */
fd1 = open ("made_by_fd1",O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);

if (fd1 < 0) {
printf ("file open error\n");
    exit(0);
}
fd2 = dup(fd1);


/* dup2 example */
ret = dup2(OLD_FD, NEW_FD);




references: [1] http://ehpub.co.kr/tag/dup2-%ED%95%A8%EC%88%98/

profile
내가 보려고 만든 벨로그
post-custom-banner

3개의 댓글

comment-user-thumbnail
2020년 10월 6일

dup 함수는 처음 보네요 ヽ(°〇°)ノ
dup와 달리 dup2에 있는 두 번째 arg인 newfd는 oldfd와 차이가 무엇인가요??

1개의 답글