Uinx下Broken pipe問題


この間、遅延関数の処理中に「Alarm clock」信号の問題に遭遇しました(私の「Unix C遅延関数の小結」を参照).現在、テスト中に「Broken pipe」信号の問題にも遭遇しており、同様にこの信号を生成するプログラムは中止されています.
私のプログラムがこの信号を生成した理由は、
クライアント側がpipeを介してサーバ側に情報を送信すると、クライアント側が閉じられ、サーバ側がクライアント側に情報を返すとBroken pipe信号が発生する.
信号を生成するには、信号を生成する前に、方法signal(int signum,sighandler_t handler)を用いて信号の処理を設定することができる.このメソッドが呼び出されていない場合、デフォルトの処理メソッドが呼び出されます.プログラムを中止し、プロンプト情報(よく発生する問題)を表示します.システムの処理方法を呼び出したり、処理方法をカスタマイズしたりすることができます.
システムには3つの処理方法が定義されています.
1)SIG_DFL   /* Default action */
2)SIG_IGN   /* Ignore action */
3)SIG_ERR   /* Error return */
プロジェクトではsignal(SIGALRM,SIG_IGN)とsignal(SIGPIPE,SIG_IGN)を呼び出し、SIGALAMとSIGPIPE信号が発生したときにプログラムを中止せず、そのままこの信号を無視した.
カスタム処理方法:

void   signal_handle(ing   signo)   
{   
	//do   something;   
}    

int   main()   
{
	signal(SIGPIPE, signal_handle);
	......
}