Linux Descriptor 편집

By | 2017년 3월 24일

[참고문서]
http://www.tldp.org/LDP/abs/html/io-redirection.html

 

Closing File Descriptors

n<&-
Close input file descriptor n.

0<&-, <&-
Close stdin.

n>&-
Close output file descriptor n.

1>&-, >&-
Close stdout.

&>
표준출력, 표준에어를 모두 특정 파일에 모두 출력하라는 의미

 

3>&1 1>&2 2>&3의 의미 – it swaps stdout with stderr)

표준출력을 표준에러로 바꿔서 출력하라는 것
3>&1 : 3번 디스크립트를 열어서 1번 표준출력으로 가라고 명령
1>&2 : 1번 표준출력의 내용을 2번 표준에러로 가라고 명령
2>&3 : 2번 표준에러의 내용을 3번 디스크립트로 가라고 명령

[디스크립터번호]가 나오고 이후에 바로 >,<,<> 리다이렉트 연산자가 나온후 연결할 것(&1)인지 닫을것(&-)인지 결정한다.
* 0번은 표준입력 stdin을 의미한다.
* 1번은 표준출력 stdout을 의미한다.
* 2번은 표준에러 stderr을 의미한다.

표준입력0, 표준출력1, 표준에러2 활용방법

# IO redirection for logging.

 

이해 해야 하는 것

 

while문 밖에서 디스크립터를 열어 활용하는 방법

 

 

<(xxxx) 의 의미

[예제] exec 4< <(sort -R list.txt)

<(sort -R list.txt) = “/dev/fd/63″로 대체됨
이후 “exec 4< /dev/fd/63″로 바뀌지만, “exec 4<<(sort -R list.txt)”로 작성할수 없는 이유는 “<<” 연산자로 바뀌어 인식되는 점과, 최종 “4< /dev/fd/63” 모습으로 바꿀수 없기 때문에,
“<” 연산자를 따로 스페이스를 넣어 구분하는 것이다. 결론적으로 “exec 4</dev/fd/63” 이러한 모습으로 바뀌어 4번 디스크립터에 read된 내용을 저장하게 되는 셈이다.
새로운 디스크립터를 열었을 경우의 이해 [중요]

(1) 최초 “sample” 파일을 뉴라인과 함께 넣어 “12345\n12345″로 기록한다.
(2) 4번 파일을 sample 파일에 할당한다. 이 시점에서 4번 디스크립터에는 “12345\n12345″가 동일하게 기록되어 있다. (입력 디스크립터로 생성되었기에 이시점에서 cat으로 확인하는 순간 모두 증발한다.)
(3) “abcd\n” newline까지 포함 텍스트가 4번 디스크립터에 첫번째 라인을 덮어쓰게 된다. 이시점에서 4번 디스크립터에는 abcd의 4글자를 읽어내고 newline을 대체하는 순간 “\n12345″만 남게 된다.
이후 sample파일에는 “동일한 위치로 “abcd\n”내용이 “12345”와 교체되면서 “abcd\n\n12345″로 남게 된다.
(4) 4번 디스크립터를 닫는다.
(5) cat으로 sample 파일을 확인한다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다