signal函数的问题

ArchiLife 2009-12-18 04:15:07
最近学习signal函数,写了一个例程:

void err(int i)
{
printf("Core dump啦 原因码为[%d]\n",i);
}

int main()
{
signal(SIGSEGV, err);
int fd;

if ((fd = open("cfg", O_RDWR)) < 0)
{
printf("文件没打开\n");
exit(1);
}
printf("文件打开:%d, %s\n",errno,strerror(errno));

sprintf(0,"bad");

return 0;
}

以上运行没什么问题,但我改了一行,让signal去监听不存在的信号。

signal(150, err);

结果下面一行的文件打开就出错了。

文件打开:22, Invalid argument


请问是什么原理导致的啊?
...全文
91 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
alexhilton 2009-12-18
  • 打赏
  • 举报
回复
那个errno是由于signal产生的。
open肯定成功了, 要不然怎么走到那句打印机的呢!
errno是会被覆盖面的
ArchiLife 2009-12-18
  • 打赏
  • 举报
回复
原来正确的操作不会将error复位成0啊,原来如此
yanjingfei 2009-12-18
  • 打赏
  • 举报
回复
signal(150, err);
你在设置signal()时,使用无效的参数,这时系统的errno值已经被设置,所以当你打印错误码时,就把
signal(150, err);引入的错误给打印出来了。

最开始的打开文件并没有出错。
deep_pro 2009-12-18
  • 打赏
  • 举报
回复
切,谁叫你没事去打印strerror(errno)
那是出错的时候打印的,你却偏要正确的时候打印

而且,这里的错误时signal(153, err); 这一步产生的,不是open时产生的
errno是全局的,最后的一个错误会覆盖这个errno


Invalid argument 说的是signal的参数错误

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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