pipe

[질문] 쓰레드간 통신에 PIPE 사용이 가능할까요?

0
points

안녕하세요.
부모프로세스와 자식 쓰레드 2개 사이에 통신용도로 pipe 를 3개 만들어서 사용하고 있습니다.
일단 data 교환도 잘되고 해서 이렇게 써도 되는줄 알고 그냥 썼습니다.
그런데 long run 시 혹은 종종 segmentaion fault 가 나서요.

혹시 pipe 를 잘 못 사용한건 아닌지 궁금합니다.

purewell의 이미지
7344
points

popen 버퍼링을 없애고 싶어요.

0
points

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

내용묶음