2011-09-15 2 views

답변

3

예가 파이프의 출력면을 지우는 처리가 누락 된 것처럼 보입니다. 데이터는 실제로 다른 프로세스로 즉시 보내지 않고 OS 버퍼 (몇 킬로 바이트를 기다리는 중)에서 버퍼링됩니다. 이 버퍼링은 출력이 터미널이 아닌 다른 것으로 전달 될 때만 발생하므로 대화식으로 테스트 할 때 출력을 볼 수 없습니다. (그 같은 많은 양의 데이터가 기록되는 경우, 그 버퍼링을 갖는 향상된 효율 승자 때 중요하지 않다.)

C면에

상기 main 함수의 상단이 줄을 추가

setvbuf(stdout, NULL, _IONBF, 0); 
티클 측면

즉시 서브 프로그램의 개시 후에 이것을 추가

fconfigure $mathModule -buffering none 

C면은 모든 printffflush를 사용하여 수행 될 수있다. 소스에 액세스 할 수없는 실제 C 프로그램이 붙어 있다면 unbuffer 프로그램으로 전체 프로그램을 래핑하여 진행할 수 있습니다. 실제로는 Expect와 함께 마술을 사용하여 프로그램을 작성하는 Tcl 스크립트입니다. 하위 프로세스는 터미널과 통신하고 있다고 생각합니다.) unbuffer의 단점은 가상 터미널을 사용한다는 것입니다. 가상 터미널은 일반적인 이전 프로세스 ID (파이프/파일 설명자는 말할 것도 없습니다)보다 훨씬 제한된 리소스 풀에서 제공됩니다.

0

Expect를 사용하여 예제 C를 사용하여 성공을 거두고 있습니다. 배워야 할 또 다른 일은 끝났습니다. 또한 예제에서 C 코드를 대체하기 위해 flex/bison을 배우고 있습니다.

+0

기대 효과가 있습니다. 그 일을 가능하게하는 데는 큰 어려움이 있습니다. –

관련 문제