如何关闭ctrl + C上的管道?

问题描述:

当我的C程序被SIGINT停止时,如何确保管道已关闭?如何关闭ctrl + C上的管道?

+0

当您的进程死亡时,操作系统将关闭所有打开的文件句柄。你确切的问题是什么? – Mat

+0

@Mat:强制关闭程序后,我的管道到'gnuplot -persist'似乎仍然存在。 – Andreas

+0

'persist'选项就是这样 - 显示过程在主gnuplot进程死后仍然存在。将管道关闭到主进程会杀死它,但不会显示图形。 – Mat

你可以使用signal handling为:

#include <signal.h> 

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

int main(..) { 
    signal(SIGINT, &sigHandler); 
    .. 
} 

  • 如果处理SIGINT,你可以只调用close()。或者你可以选择保持原样,并保持管道畅通。
  • 如果你不处理信号,你的程序将消失,管道的一侧将自动被操作系统关闭。管道的另一端将获得EPIPE或零或-1的读数。