私はこのコードが何をしているのか理解しようとしています。このコードは何をしますか? C
int sethandler(void (*f)(int), int sigNo) {
struct sigaction act;
memset(&act, 0, sizeof(struct sigaction));
act.sa_handler = f;
if (-1==sigaction(sigNo, &act, NULL))
return -1;
return 0;
}
void sigchld_handler(int sig) {
pid_t pid;
for(;;)
{
pid=waitpid(0, NULL, WNOHANG);
if(0==pid) return;
if(0>=pid) {
if(ECHILD==errno) return;
ERR("waitpid:");
}
}
}
これは、メインの関数呼び出しです:
if(sethandler(sigchld_handler, SIGCHLD))
ERR("Setting parent SIGCHLD Error:");
ERR
だけで、エラーの種類を出力し、それが発生した行に、それは質問とは無関係です。
以下は私が混乱していることです: 最初にsethandler
またはsigchld_handler
と呼ばれる機能はどれですか? (*f)(int)
とは何ですか? act.sa_handler = f
とは何ですか?
'sethander'関数のどの行で' sigchld_handler'関数が呼び出されますか? –
どれもありません。この関数は呼び出されません。シグナルハンドラとして登録されています。 – duskwuff