我编写了一个程序来捕获<ctrl> + <c>
信号,然后输出一个列表,但是我有一个编译时错误,我似乎无法通过。我一直收到这个错误:
无法在赋值
中将`void()()'转换为`void(*)(int)'
根据编译器,错误发生在这行代码中:
handler.sa_handler = handle_SIGINT;
以下是周围的代码:
cmdcounter = 1;
/*set up the signal handler*/
struct sigaction handler;
handler.sa_handler = handle_SIGINT;
sigaction(SIGINT, &handler, NULL);
strcpy(buffer, "Caught <ctrl><c>\n");
handle_SIGINT
在程序的早期定义:
void handle_SIGINT()
{
write(STDOUT_FILENO, buffer, strlen(buffer));
// Print out last 10 commands that were used.
printf("Most recent commands entered:\n");
if(cmdcounter <= 10) {
for (i=0; i < cmdcounter; i++) {
printf("%d. %s\n", i+1, cmd[i]);
}
}
else {
for (i = cmdcounter-10; i < cmdcounter; i++) {
printf("%d. %f\n", i, cmd[i]);
}
}
}
一切看起来都不错,但显然不是。有谁知道是什么引发了这个错误?
答案 0 :(得分:4)
您的函数handle_SIGINT
错误。
告诉我们这个功能,我们将能够准确地告诉你它是怎么回事。
handle_SIGINT
SUPPOSED 为:
void handle_SIGINT(int){....}
您遗漏了int
部分作为参数。
答案 1 :(得分:3)
错误告诉您签名不匹配。 handle_SIGINT
应该是:
void handle_SIGINT(int ){ ... }