# ./program | grep aaa >> result.txt 의 문제점
글쓴이: k1d0bus3 / 작성시간: 화, 2011/04/26 - 3:49오전
# ./program | grep aaa >> result.txt
화면에 text를 출력해주는 program의 결과중, 일부를 파일로 저장하려고합니다.
위의 명령을 사용하니까, program이 실행이 끝난후에야 result.txt에 저장이 되더군요.
질문1.---------------------------------------------------------------
./program | grep aaa 가 오랜시간동안 많은출력결과를 낸다고 가정한다면,
결과들이 파일에저장되기도전에, 메모리 오버플로우가 일어날수있다고 말할수있나요?
질문2.---------------------------------------------------------------
program이 끝날때까지 기다리지않고,
출력값들이 나오는 즉시 result.txt에 쓰려면 어떡게해야 합니까?
Forums:
제가 아는 한도내에서는
./program이 실행 종료 전까지 출력될 내용을 메모리에 모두 보관하고 있다가
종료 직전에 쓸 경우 문제가 될 수도 있을것 같습니다.
grep은 제가 알기로는 입/출력을 스트림으로 처리하니까요.
-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.
buffering이 어디서 되는지 알아야 될것
buffering이 어디서 되는지 알아야 될것 같은데요.
만약 grep이 데이터를 buffer하는것이면 grep 에 --line-buffered option을 주시면 한줄마다 flush하므로 결과가 (아마도) 바로 저장될 것 같습니다.
질문1은 이해는 잘 못했지만 memory overflow와는 관련이 적어보입니다.
질문 1: 아니오. 파이프를 썼기 때문에, 파이프
질문 1: 아니오. 파이프를 썼기 때문에, 파이프 내부 버퍼 크기만큼 delay되었다가 한꺼번에 쓰기 때문에 그런 증상이 일어납니다.
질문 2: 비표준이지만, GNU grep의 경우, --line-buffered란 옵션을 쓰면, 그나마 줄 단위로 출력하기 때문에, result.txt를 다른 곳에서 확인할 수 있을 겁니다. 대신 성능이 저하될 우려가 있습니다.
(browser 띄워놓고, 하루 지나고 답변했더니, MasterQ님의 답변이 있네요. ㅋ)
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기