[minishell]dup정리

개발하는 곰댕이·2021년 11월 10일
1

42Seoul

목록 보기
5/45

5. 파이프(Pipe) 처리[리눅스] DUP, DUP2 설명 및 쉬운 사용법, 사용 예제(그림 포함)를 보시면 좀 더 쉽게 이해할 수 있습니다.

dup2

dup2는 함수설명에서 말했듯 fd가 가리키고 있는 파일을 변경한다고 했습니다.
간단하게 그림으로 설명하자면 기본적으로 fd 0, 1, 2는 다음과 같다고 합시다.

open을 통해서 새로운 fd를 할당한다면

다음과 같은 상태가 됩니다.
여기서 dup2(fd(3), STDIN_FILENO(0))을 하게 된다면 stdin은 new_file을 가리키게 됩니다.

이렇게 되기 때문에 만약 read(STDIN_FILENO, str, 20)를 한다고 하더라도 표준입력을 읽어들이지 않고 new_file에서 입력을 읽어들입니다.

dup

dup도 dup2와 비슷합니다. 다만 새로 할당되는 fd는 무조건 매개변수로 받은 oldfd와 같은 파일을 가리키게 됩니다.

여기서 fd = dup(STDIN)을 한다면 다음과 같이 됩니다.

dup2로 바꾼 fd를 되돌리기

dup2를 통해서 바뀐 fd를 원래대로 되돌리려면 dup2를 사용하기 전에 임시 fd를 만들어서 저정해두고 나중에 바꾸면 됩니다.
예를 들면
oldfd = dup(STDIN)
dup2(fd, STDIN)
이렇게 하면 다음과 같이 됩니다.

여기서 dup2(oldfd, STDIN)를 하면 이렇게 돌아옵니다.

[minishell] 사용가능 함수 정리
[minishell]리다이렉션 및 here doc정리
[minishell]dup정리

0개의 댓글