signal函数的定义问题

wslywsly 2007-11-27 08:05:57
signal函数原型:
void (*signal(int sig, void (*handler)(int)))(int)

可以用下面两句替换:
typedef void (*HANDLER)(int);
HANDLER signal(int, HANDLER);

调用signal函数的例子:
#include <unistd.h>
#include <signal.h>
void handler(int sig)
{
printf("%d\n", sig);
printf("hello\n");
}

int main()
{
int i;
signal(SIGALRM, handler);
alarm(5);
for (i = 1; i < 7; i++)
{
printf("sleep %d ...\n", i);
sleep(1);
}
return 0;
}

中间“signal(int sig, void (*handler)(int))”返回一个指向void (*handler)(int
)函数的指针。

这里不明白的是,最后一个(int),这个参数应该是signal返回的指针指向的函数的
参数,那么什么地方给这个参数赋值了呢?(signal函数调用的时候只给自己的两个参
数赋值了,那最后面的那个参数,是怎么赋值的?)
...全文
243 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wslywsly 2007-11-27
  • 打赏
  • 举报
回复
按照最上面signal函数的原型:void (*signal(int sig, void (*handler)(int)))(int)
也应该返回一个函数指针,那怎么没有+参数呢?
blackmurder 2007-11-27
  • 打赏
  • 举报
回复
没错啊
signal(5, &handler)此处的返回值就是指向handler的函数指针,后面当然要+参数了
wslywsly 2007-11-27
  • 打赏
  • 举报
回复
我自己随便写了一个函数:

#include <stdio.h>

void handler(int sig)
{
printf("%d\n", sig);
printf("hello\n");
}

void (*signal(int sig, void (*handler)(int)))(int)
{
return handler;
}

int main()
{
// signal(5, &handler)(0);
signal(5, &handler);
return 0;
}

用signal(5, &handler)(0);会有输出。
用signal(5, &handler);没有输出。
blackmurder 2007-11-27
  • 打赏
  • 举报
回复
后面的那个参数是要调用handler的时候"赋值"的(不能叫赋值吧~~)
比如signal函数定义如下:
HANDLER singal(int i, HANDLER handler)
{
(*handler)(i); //将i作为实参传给形参
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧