Linux(入门基础):17---信号(3)alarm、ualarm定时函数、pause

一、alarm函数

#include <unistd.h>
unsigned int alarm(unsigned int seconds);
功能:闹钟,当执行到该函数之后开始计时,超时时产生SIGALRM信号。如果不忽略或不捕捉此信号,则其默认动作是终止该进程 
参数:
     seconds的值是产生SIGALRM需要经过的时钟秒数
    如果秒为零,则取消任何挂起的警报。在任何情况下,任何先前设置的报警都会被取消
返回值:
    成功:第一次调用返回0,不是第一次调用返回以前设置的闹钟时间的余留秒数
    失败:非0
注意事项:
 当这一时刻达到时,信号由内核产生,由于进程调度的延迟,所以进程得到控制从而能够处理该信号还需要一定的时间间隔;
    如果我们想要捕捉SIGALRM信号,并且处理SIGALRM信号,必须在alarm之前书写该信号的处理函数。
//案例
#include<signal.h>
#include<stdio.h>
int main(void)
{
    printf("first time return:%d\n",alarm(4));
    sleep(1);	
    printf("after sleep(1),remain:%d\n",alarm(2));
    printf("renew alarm,remain:%d\n",alarm(1));
}

二、ualarm函数

#include <unistd.h>
useconds_t ualarm(useconds_t usecs, useconds_t interval);

/*在usecs微秒后,将SIGALRM信号发送给进程,并且之后每隔interval微秒再发送一次
SIGALRM信号。如果不对SIGALRM信号进程处理,默认操作是终止进程

返回值:此函数返回以前设置的任何警报的剩余微秒数。如果没有挂起警报,
则返回0(第一次调用该函数也返回0)。常见的errno如下:

EINTR:被一个信号打断了

EINVAL:usecs或interval不小于1000000(在被认为是错误的系统上)
*/


//案例
#include<unistd.h>
#include<signal.h>
#include<errno.h>
#include<stdio.h>
 
void handler()
{
    printf("int:hello\n");
}
 
int main()
{
    int i;
    signal(SIGALRM,handler);
    //因为是第一次设置,所以返回0
    printf("%d\n",ualarm(500000,200000));
 
    while(1)
        pause();
 
    return 0;
}

三、

 #include <unistd.h>
    int pause(void);

功能

pause使调用进程(或线程)休眠,直到接受到终止进程的信号,或者接收到信号并从信号捕获函数中返回时,pause才返回

返回值

pause仅在捕获信号并返回信号捕获函数时返回。在这种情况下,pause返回-1,errno设置为eintr

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值