这个代码是做什么的?C
我正在试图弄清楚这段代码的作用,我需要一些帮助这个代码是做什么的?C,c,signals,C,Signals,我正在试图弄清楚这段代码的作用,我需要一些帮助 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; }
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\u handler
?。
(*f)(int)
是什么意思?。
而
act.sa_handler=f
做什么?您需要找到sigaction
的声明
f
是指向函数int->void的指针
sa_handler
是sigaction
中的en元素,设置为指向函数的指针
至于先调用哪一个,该信息不在您发布的代码中
添加:
sethandler
首先调用您需要找到sigaction
的声明
f
是指向函数int->void的指针
sa_handler
是sigaction
中的en元素,设置为指向函数的指针
至于先调用哪一个,该信息不在您发布的代码中
添加:sethandler
先调用
下面是我所困惑的:哪个函数首先被调用sethandler
还是sigchld\u handler
sethandler
是此代码中唯一直接调用的函数。但是,在sethandler
中调用sigaction
可能会导致以后调用sigchld\u handler
(*f)(int)
是什么意思
void(*f)(int)
是一个名为f
的指针变量,指向一个函数,该函数接受一个int
参数并返回void
。(在这种情况下,指向的函数是sigchld\u handler
)
那么,act.sa_handler=f
做什么呢
它将该指针指定给act.sa_handler
。这用于将该函数注册为信号处理程序
下面是我所困惑的:哪个函数首先被调用sethandler
还是sigchld\u handler
sethandler
是此代码中唯一直接调用的函数。但是,在sethandler
中调用sigaction
可能会导致以后调用sigchld\u handler
(*f)(int)
是什么意思
void(*f)(int)
是一个名为f
的指针变量,指向一个函数,该函数接受一个int
参数并返回void
。(在这种情况下,指向的函数是sigchld\u handler
)
那么,act.sa_handler=f
做什么呢
它将该指针指定给act.sa_handler
。这用于将该函数注册为信号处理程序
void(*f)(int)
是什么意思
它的语法是将f
声明为指向函数的指针,该函数使用一个int
参数,并且不返回任何结果。出于可读性原因,我更喜欢在上使用typedef
你应该读一本关于编程的好书(例如,解释将函数作为值处理的兴趣)和另一本关于用C编程的好书。然后你会发现C确实有正版的,并且你需要使用约定
什么是act.sa_handler=f代码>执行
它为结构act
的成员sa_handler
分配函数指针f
你需要仔细阅读信号。我建议先阅读,然后仔细阅读(异步信号安全函数的概念很难理解,很重要),然后
(所以需要几本书来回答你的问题。我提供了参考资料,但你需要花几个星期的时间来阅读)
void(*f)(int)
是什么意思
它的语法是将f
声明为指向函数的指针,该函数使用一个int
参数,并且不返回任何结果。出于可读性原因,我更喜欢在上使用typedef
你应该读一本关于编程的好书(例如,解释将函数作为值处理的兴趣)和另一本关于用C编程的好书。然后你会发现C确实有正版的,并且你需要使用约定
什么是act.sa_handler=f代码>执行
它为结构act
的成员sa_handler
分配函数指针f
你需要仔细阅读信号。我建议先阅读,然后仔细阅读(异步信号安全函数的概念很难理解,很重要),然后
(因此需要几本书来回答您的问题。我提供了参考资料,但您需要花费数周的时间阅读它们)在
sethander
函数的哪一行调用sigchld\u handler
函数?没有一本。函数未被调用;它正在注册为信号处理程序。在sethander
函数的哪一行调用sigchld\u处理程序
函数?它们都没有。函数未被调用;它正在注册为信号处理程序。