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를 하든 버퍼링을 쓰지 않든 해서 완벽한 한 줄을 로그파일에 기록하는데 화면에 찍히는 것은 끝부분을 완결하지 않은 줄입니다.