SIGALARM在negetive中给出恒定值

时间:2015-11-21 02:44:55

标签: linux

achul@achul:~/chennai/linux/SM_practise$ cat doubt.c
#include<stdio.h>
#include<signal.h>
main()
{
    int ret;
    printf("\nhello x : if i'm give -ve alarm second then what it will return \n");
    ret=alarm(-5);
    printf("ret=%d\n",ret);//
    ret=alarm(8);
    printf("ret=%d\n",ret);// why exactly 2G
    while(1);
} 

因为alarm 1st参数是unsigned int,这就是为什么它可以将-5转换为无符号值。如果我在第二次报警时发出任何负值报警,它只返回2147483647?为什么会这样......任何理论?

1 个答案:

答案 0 :(得分:0)

原因是你指定4亿多(4,294,967,296 - 5)秒 - 大约是136年 - 延迟。

当signed int被提升为unsigned int时会发生这种情况。 alarm()的声明是:

unsigned int alarm (unsigned int seconds);

-5作为32位值是twos-complement中的1111 1111 1111 1111 1111 1111 1111 1011(这是所有现代CPU使用的)二进制文件。

关于作为unsigned int的位模式使其值为4,294,967,291。