【发布时间】:2017-03-11 17:08:10
【问题描述】:
我正试图弄清楚这段代码的作用,我需要一些帮助。
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:");
}
}
}
这是 main 中的函数调用:
if(sethandler(sigchld_handler, SIGCHLD))
ERR("Setting parent SIGCHLD Error:");
ERR 只是打印出错误的类型,发生在哪一行,与问题无关。
以下是我感到困惑的:
哪个函数首先被调用sethandler 或sigchld_handler?。
(*f)(int)是什么意思?
act.sa_handler = f做了什么?
【问题讨论】: