2011-10-30 4 views
0

C 프로그램이 SIGINT에 의해 중지 될 때 어떻게 파이프가 닫히도록 할 수 있습니까?ctrl + C에서 파이프를 닫는 방법?

+0

OS가 프로세스가 종료 될 때 열려있는 파일 핸들을 모두 닫습니다. 당신의 문제는 정확히 무엇입니까? – Mat

+0

@Mat :'gnuplot -persist'에 대한 내 파이프는 프로그램을 강제 종료 한 후에도 지속되는 것처럼 보입니다. – Andreas

+0

'persist' 옵션은 바로 그 것을위한 것입니다 - 디스플레이 프로세스는 메인 gnuplot 프로세스가 죽은 후에도 남아 있습니다. 주 프로세스에 파이프를 닫으면 그래프가 표시되지 않고 파이프가 사라집니다. – Mat

답변

2

당신은 그것에 대해 signal handling을 사용할 수

#include <signal.h> 

void sigHandler(int sig) { 
    // Respond to the signal here. 
} 

int main(..) { 
    signal(SIGINT, &sigHandler); 
    .. 
} 
1
  • 을 당신이 SIGINT를 처리 할 경우, 당신은 close()를 호출 할 수 있습니다. 또는 사물을 그대로 유지하고 파이프를 열어 둘 수도 있습니다.
  • 신호를 처리하지 않으면 프로그램이 사라지고 파이프의 측면이 OS에 의해 자동으로 닫힙니다. 파이프의 다른쪽에는 EPIPE 또는 0 또는 -1의 readreturn이 있습니다.