2011-10-30 61 views
0

當我的C程序被SIGINT停止時,如何確保管道已關閉?如何關閉ctrl + C上的管道?

+0

當您的進程死亡時,操作系統將關閉所有打開的文件句柄。你確切的問題是什麼? – 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()。或者你可以選擇保持原樣,並保持管道暢通。
  • 如果你不處理信號,你的程序將消失,管道的一側將自動被操作系統關閉。管道的另一端將獲得EPIPE或零或-1的讀數。