[질문] popen을 이용하여 fgets, fread로 내용을 받을 경우 블럭 되는 현상

sabihanl의 이미지

안녕하세요 궁금한게 있어서 이렇게 질문 올립니다.

예를들어

FILE *fp;
char  str[1024];
 
fp = popen("ls", "r");
while (fgets(str, sizeof str - 1, fp)) {
       printf("%s\n", str);
}
 
pclose(fp);

이런 코드가 있다고 가정하죠..
물론 결과는 화면에 ls한 결과가 엄청 잘 찍힙니다...
헌데.. popen의내용을 popen("ping 192.168.0.1", "r");
이런식으로 바꾸면 결과가 화면에 찍히는데 수십초~수분 이 걸리게 됩니다.
(커맨드창에서 직접 ping 192.168.0.1하면 정상적으로 바로바로 결과가 화면에 나옵니다.)

이 소스코드는 쓰레드상에서 실행 되고 있는데..
혹시 뭐 ping같은 명령은 네트워크를 왔다 갔다 하는 내용이고 해서.. 우선순위가 밀리거나 하는 건가요?

위와같은 상황에서 fgets나 fread로 혹은 다른 방법으로 대기시간없이 바로바로 결과를 받아올 방법없을까요?

최피디의 이미지

출력 스트림 버퍼에만 쌓이는 이유라면
fflush를 써서 강제로 출력해줄 수 있겠습니다.

KT하이텔, 앱스 개발자

sabihanl의 이미지

버퍼에 쌓이는거라기 보단 단순히
ls같은 명령어에 비해서 ping같은 명령을 실행했을 경우에만 읽어오는데 엄청나게 오래 걸려서요..
말씀해주신대로 fflush를 해봐도 역시 반응은 늦습니다

관심 감사합니다 ㅠ _ㅠ