针对signal函数实现的问题

针对signal函数实现的问题

#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
#include <unistd.h>

void sig_handler(int signum)
{
	printf("rec signal num = %d\n", signum);
	return;
}

//SIGALRM
int main(int argc, const char *argv[])
{
	if(singal(SIGALRM, sig_handler) == SIG_ERR)
	{
		printf("signal call is error!\n");
		return -1;
	}

	alarm(5);

	while(1);
	return 0;
}

老师您好,针对课堂中的代码有几个疑问:

  1. if判断中,为什么返回值需要为-1,这与返回值0有什么区别?这么做有什么好处?
  2. while(1)这个循环为什么不需要写在最前面,把前面调用signalalarm(5)包在大括号里?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
大白老师 2023-12-23 23:25:36

1.这个返回值的定义,需要看signal函数的返回值的含义,你可以通过 man  signal查看该函数返回值的含义。这个函数返回的是个指针,SIG_ERR代表函数返回失败。通过if语句对函数调用情况进行判断。 2. while循环要是写在前面,alarm函数就不会执行了。例如,下面的例子就会一直死循环卡着输出"hello", 下面的printf("world");不会致性。while(1){          printf("hello\h");}printf("world\n"):这里的alarm和signal函数,在后面的可能会讲解的。alarm(5)代表系统内核每过5s发送一次SIGALARM信号。signal函数是用来捕捉信号的。

  • 提问者 万能小企鹅 #1
    1. 我对signal函数的返回值没有什么疑问,我是说使用if判断时,当判断了signal返回了SIG_ERR时为什么要自己写一个return -1?

    2. while循环为什么不写成如下代码?

    while(1) {
        alarm(5);
    }

    alarm(5)和if都没有被大括号括起来为什么会一直在执行?

    2023-12-24 00:11:21
  • 中年猿叔 回复 提问者 万能小企鹅 #2

    返回-1是因为signal函数返回SIG_ERR表示函数调用失败了,alarm(5)执行后就设置好了,如果写在循环里面那就会一直设置,就无法让定时器超时了

    2023-12-24 11:11:49
  • 提问者 万能小企鹅 回复 中年猿叔 #3

    老师,还是有疑问,while(1)这里循环的究竟是什么代码?

    2023-12-25 19:36:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师