2012-08-02 3 views
1

여기에 코드를 고려하십시오파일 io에서 열린 스트림이 차단되면 어떻게됩니까?

$handle = popen("some command that generates an infinite stream of output to stdout", "r"); 

while ($line = fgets($handle)) { 
    echo $line; 
    sleep(3); 
} 

내 질문은 : 실제로 수면 (3)는 popen에 전달 된 명령() 여전히 출력을 분출되는 동안 무슨 일이 일어나고 있는지? 그것이 PHP의 메모리에 버퍼링되고 있습니까?

출력이 휴지기가 될 가능성이 있습니까?

답변

1

OS에 따라 다릅니다. 데이터는 버퍼링 될 수 있고, 다른 프로그램의 출력 호출은 차단되거나, 이들의 조합 일 수있다.

+0

데이터가 삭제 될 가능성이 있습니까? – Tim

+0

프로그램이 출력시 블로킹을 비활성화하고 재 시도하지 않는 경우에만. –

+0

popen'd 프로그램이 차단되는지 여부를 어떻게 확인할 수 있습니까? 나는 그것이 네트워크 트래픽 분석기를 popen하기를 원하기 때문에 묻습니다. 데이터가 차단 될 경우 – Tim