Posts [Linux] dup(), dup2()
[Linux] dup(), dup2()
Cancel

[Linux] dup(), dup2()

dup() && dup2()

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

✔️ header

1
#include <unistd.h>

✔️ prototype

1
2
3
4
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은 같다.

img

✔️ use case

1
2
3
4
5
6
7
8
9
10
11
12
/* 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

This post is licensed under CC BY 4.0 by the author.

Contents

[Linux] drop cache shell script

[Operating Systems] mmap()