2017-02-12 10 views
0

popen을 사용하여 응용 프로그램에서 다른 프로세스를 열고 해당 출력을 구문 분석하고 있습니다. 프로그램이 결과를 얻 자마자 통보를 받고 싶습니다. 현재 내 프로그램의 모든 항목은 이러한 작업에 epoll을 사용합니다. 지금 popenfd 대신 FILE *을 반환합니다. fileno 함수를 사용하고 결과가 fd 인 것을 제외하면 epoll에 저장됩니까? 그렇지 않다면 다른 방법이 있습니까? 나는 그 과정을 막기를 원하지 않는다. 내가 왜 그 통보를 원하는지.FILE * in epoll 사용

+0

버퍼링 된 I/O ('FILE *')와 (e) 폴링을 혼합하는 것을 권장합니다. 개인적으로 필자는'popen_fd'를 작성하여 '읽을 수있는'디스크립터를 반환합니다. – melpomene

답변

0

네,주의하지 않고 파일 설명자를 추가로 사용하지 않는 한 안전하게 보입니다. 한 가지 더, 파일 디스크립터를 비 블로킹으로 표시하기를 원할 수도 있습니다. 그래야 read()을 차단하지 않고 EBUSY 또는 EAGAIN 체크 errno을 처리 할 수 ​​있습니다.

+0

'FILE *'인터페이스의 파일 디스크립터에서'epoll()'을 사용하는 것이 안전하다는 것에 동의합니다. 단지 디스크립터를 활성화 한 것으로 돌려줍니다. 그러나 * 파일 설명자를 non-blocking으로 표시하십시오 *? 실제로 읽는 것이 질문에 언급 된'FILE *'기반의 stdio 함수를 통해 이루어지면 안전하다고는 생각지 않습니다. 'FILE *'의 기본 파일 디스크립터를 non-blocking으로 표시하는 것은 라이브러리 호출이 논 블로킹 디스크립터를 사용하도록 설계되지 않았기 때문에 심각한 문제를 일으킬 수있다. –