popen 버퍼링을 없애고 싶어요.
글쓴이: purewell / 작성시간: 화, 2006/05/30 - 3:59오후
fp = popen("tail -f /var/log/mylog.log", "r"); fd = fileno(fp); setbuf(fp, NULL); while (1) { // 중략 FD_ZERO(&rtest); FD_SET(fd, &rtest); select (FD_SETSIZE, &rtest, NULL, NULL, NULL); if (FD_ISSET(fd, &rtest)) { read from fd; write to stderr; } }
위와 같은 구문에서 천천히 자라고 있는 엄청난 크기의 로그 파일을 읽어서 화면(표준오류로 하여 버퍼링 없음)에 찍어주는 것인데, 중간에 버퍼링을 하는 것 같습니다. 분명 로그를 만드는 쪽에서는 fflush를 하든 버퍼링을 쓰지 않든 해서 완벽한 한 줄을 로그파일에 기록하는데 화면에 찍히는 것은 끝부분을 완결하지 않은 줄입니다.
ex)
....
20050530 E0001 comments
20050
위와 같이 말이죠;
문제는 한~ 참 지나면 또 일부가 찍힙니다. 왜 그런 것일까요?
이것을 방지하려면 어떻게 해야하나요?
Forums:
fcntl로
fcntl로 non-blocking모드로 설정하면 되지 않을까요?
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
setbuf를 사용하세요
FILE 구조체를 통한 버퍼관리는 setbuf 함수를 이용해서 조정합니다.
---
http://coolengineer.com
흠흠... 위에 명령
흠흠... 위에 명령 뒤에 awk 명령이 파이프 기호로 더 들어가는 것이었는데,
gawk로 바꾸고 awk 스크립트 안에 'fflush();' 함수를 넣어서 해결했습니다.
^ -^) 답변 감사드립니다.
_____________________________
언제나 맑고픈 샘이가...
http://yubink.com - 강아지 필요하세요?
http://purewell.biz - 헙!!
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
댓글 달기