티스토리 뷰

os/Linux

standard streams

Jacob_baek 2013. 4. 12. 22:55

표준스트림

표준 스트림에는 다음이 존재한다.

 name

 number

 

 stdin

 0 

 키보드를 통해 입력을 받는것을 buffer 에 저장한다.

 stdout

 1

 일반적인 출력을 담당한다.

 stderr

 2

 일반적으로 에러 메세지를 출력한다. 실제 buffer에 쌓이지 않기 때문에 

 바로 출력해야 하는 (예로 tail -f 같은) 경우 사용하기 좋다.


stderr vs stdout

쉘 프로그래밍을 하다보면 stderr로 output을 받는 경우가 있다.

왜 그럴까 보니 이런 차이가 있었다. 


https://eklitzke.org/stdout-buffering


정리해보면 stderr는 buffer되지 않기 때문에 실제 출력결과가 즉시 출력되고 stdout은 buffer 되기 때문에 일정량 쌓여야 출력이 이루어진다. (해당 buffer size는 개별 환경에 따라 다르다.)


참고로 buffer는 kernel 영역이기에 context switching 이 발생되어 성능적 이슈로 buffer되는 stdout, stdin을 unbuffer로 설정할수도 있다.

https://stackoverflow.com/questions/9238576/is-it-safe-to-disable-buffering-with-stdout-and-stderr


kernel variables 

pipe buffer size 설정

[root@localhost ~]# ulimit -a

pipe size            (512 bytes, -p) 8

위 설정값에 따라 buffer에 데이터가 4096byte를 넘어서는 경우 데이터가 짤릴수 있다.

ulimit을 사용하여 변경하거나 code 내에서 변경을 해야 한다.

아래는 링크는 code내에서 해당 size를 변경한 케이스이다.

https://stackoverflow.com/questions/5218741/set-pipe-buffer-size


참고사이트

https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-i-o-redirection

https://www.ibm.com/developerworks/library/l-lpic1-v3-103-4/l-lpic1-v3-103-4-pdf.pdf

https://eklitzke.org/stdout-buffering

http://www.pixelbeat.org/programming/stdio_buffering/

http://egaoneko.github.io/os/2015/05/24/linux-starter-guide-5.html

'os > Linux' 카테고리의 다른 글

ssh certification  (0) 2014.09.01
desktop icon execution of root privilege in ubuntu  (0) 2013.05.13
ssh character encoding  (0) 2013.03.15
vim (vi)  (0) 2012.09.10
strace  (0) 2012.06.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함