[질문] popen을 이용하여 fgets, fread로 내용을 받을 경우 블럭 되는 현상
글쓴이: sabihanl / 작성시간: 수, 2008/04/23 - 1:42오후
안녕하세요 궁금한게 있어서 이렇게 질문 올립니다.
예를들어
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로 혹은 다른 방법으로 대기시간없이 바로바로 결과를 받아올 방법없을까요?
Forums:
fflush() 같은 함수를 쓰면 되지 않을까요?
출력 스트림 버퍼에만 쌓이는 이유라면
fflush를 써서 강제로 출력해줄 수 있겠습니다.
KT하이텔, 앱스 개발자
음..
버퍼에 쌓이는거라기 보단 단순히
ls같은 명령어에 비해서 ping같은 명령을 실행했을 경우에만 읽어오는데 엄청나게 오래 걸려서요..
말씀해주신대로 fflush를 해봐도 역시 반응은 늦습니다
관심 감사합니다 ㅠ _ㅠ
저도 이문제에 대해 고민중입니다..
일년이란 세월이 더 흘렀군요...
sabihanl 님 이문제 해결 하신건가요...
완전 골치 아파 죽겠네요..
흑흑
댓글 달기