dup, dup2 원리

박희령·2024년 3월 27일

42Seoul

목록 보기
3/5
post-thumbnail

dup, dup2

dupdup2 함수는 UNIX 및 유닉스 계열 시스템에서 파일 디스크립터를 복사하는 데 사용되는 시스템 호출이다. 이 함수들은 주로 리소스의 핸들(예: 파일, 파이프, 소켓 등)을 복사하거나, 입출력 리디렉션을 구현할 때 사용된다.

dup 함수

dup 함수는 주어진 파일 디스크립터의 복사본을 생성한다.
새로운 파일 디스크립터는 가장 낮은 번호의 사용 가능한 파일 디스크립터를 사용한다.


함수 원형


#include <unistd.h>
int dup(int oldfd);
  • oldfd: 복사하고자 하는 원본 파일 디스크립터
  • 반환 값: 성공 시 새로운 파일 디스크립터를 반환하고, 실패 시 1을 반환.

dup2 함수

dup2 함수는 dup와 비슷하지만, 복사 대상으로 사용할 파일 디스크립터 번호를 지정할 수 있다. 만약 지정된 번호의 파일 디스크립터가 이미 열려 있다면, dup2는 그것을 먼저 닫고 복사 작업을 수행한다.

함수 원형


#include <unistd.h>
int dup2(int oldfd, int newfd);
  • oldfd: 복사하고자 하는 원본 파일 디스크립터
  • newfd: oldfd의 복사본이 될 파일 디스크립터 번호이다. 만약 newfd가 이미 열려 있는 파일 디스크립터라면, dup2newfd를 닫고 oldfdnewfd에 복사한다.
  • 반환 값: 성공 시 newfd를 반환하고, 실패 시 1을 반환한다.

Dup 예시

  • 위 그림은 fd2 = dup(fd1) 상황이다.

int dup(int oldfd)

dup 함수는 주어진 파일 디스크립터의 복사본을 생성한다. 이 말을 oldfd가 가리키는 파일에 접근할 수 있는 새로운 fd를 얻는다로 이해하자.

복사본이라는 말이 파일디스크립터의 구조를 모르면 오히려 이해하는데 방해가 되는거 같다. 위의 그림처럼 dup은 fd2와 fd1이 같은 파일테이블을 가리키게 만들어 준다고 생각하자.


Dup2 예시

  • 2번 그림: dup2(fd1, STDOUT_FILENO(1))
  • 3번 그림: dup2(STDERR_FILENO(2), fd1)

int dup2(int oldfd, int newfd);

dup2 함수는 dup와 비슷하지만, 복사 대상으로 사용할 파일 디스크립터 번호를 지정할 수 있다. 만약 지정된 번호의 파일 디스크립터가 이미 열려 있다면, dup2는 그것을 먼저 닫고 복사 작업을 수행한다.
dup2또한 newfd가 oldfd가 가리키는 파일테이블에 접근할 수 있도록 설정한다고 생각하면 쉽다.


참고💡

기본적으로 할당되는 파일 디스크립터
0 : 표준 입력(Standard Input) / STDIN_FILENO
1 : 표준 출력(Standard Output) / STDOUT_FILENO
2 : 표준 에러(Standard Error) / STDERR_FILENO

출처: https://reakwon.tistory.com/104

profile
기억하고 싶은 것들을 기록합니다.

0개의 댓글