捉拿信号的alarm和pause函数
来源:互联网 发布:php wsdl 生成 编辑:程序博客网 时间:2024/06/04 18:51
1. alarm函数:
alarm函数是设置一个计时器, 在计时器超时的时候, 产生SIGALRM信号. 如果不忽略或捕捉此信号, 它的默认操作是终止调用该alarm函数的进程.
原型如下:
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
返回0或余留秒数
unsigned int alarm(unsigned int seconds);
返回0或余留秒数
说一下alarm的返回值问题, 每个进程只能有一个alarm维护的"闹钟".
如果该"闹钟"顺利超时, 则返回0;
如果该"闹钟"在计时过程中, 调用了另一个alarm函数, 则该"闹钟"的余留秒数作为该次alarm的返回值, 并且新的"闹钟"开始计时.(实际上是新的闹钟替代了以前的闹钟)
代码举例:
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
/* My alarm func for print */
static unsigned int my_alarm(unsigned int nsec)
{
printf("Wait for %u secs to alarm ", nsec);
return alarm(nsec);
}
/* My sleep func for print */
static unsigned int my_sleep(unsigned int nsec)
{
printf("Sleep for %u secs ", nsec);
return sleep(nsec);
}
/* SIGALRM handler */
static void sig_alarm(int signo)
{
printf("SIGALRM ");
}
int main()
{
/* Check alarm return value */
unsigned int ret1, ret2;
/* Signal handle */
if (signal(SIGALRM, sig_alarm) < 0)
perror("signal");
printf("Alarm start: ");
/* First alarm */
ret1 = my_alarm(5);
my_sleep(3);
printf("New alarm: ");
/* Second alarm */
ret2 = my_alarm(2);
my_sleep(4);
printf("Alarm end ");
/* Show the two return values */
printf("First return: %u ", ret1);
printf("Second return: %u ", ret2);
return 0;
}
#include <signal.h>
#include <stdio.h>
/* My alarm func for print */
static unsigned int my_alarm(unsigned int nsec)
{
printf("Wait for %u secs to alarm ", nsec);
return alarm(nsec);
}
/* My sleep func for print */
static unsigned int my_sleep(unsigned int nsec)
{
printf("Sleep for %u secs ", nsec);
return sleep(nsec);
}
/* SIGALRM handler */
static void sig_alarm(int signo)
{
printf("SIGALRM ");
}
int main()
{
/* Check alarm return value */
unsigned int ret1, ret2;
/* Signal handle */
if (signal(SIGALRM, sig_alarm) < 0)
perror("signal");
printf("Alarm start: ");
/* First alarm */
ret1 = my_alarm(5);
my_sleep(3);
printf("New alarm: ");
/* Second alarm */
ret2 = my_alarm(2);
my_sleep(4);
printf("Alarm end ");
/* Show the two return values */
printf("First return: %u ", ret1);
printf("Second return: %u ", ret2);
return 0;
}
程序的运行结果如下:
Alarm start:
Wait for 5 secs to alarm
Sleep for 3 secs
New alarm:
Wait for 2 secs to alarm
Sleep for 4 secs
SIGALRM
Alarm end
First return: 0
Second return: 2
Wait for 5 secs to alarm
Sleep for 3 secs
New alarm:
Wait for 2 secs to alarm
Sleep for 4 secs
SIGALRM
Alarm end
First return: 0
Second return: 2
由此可见alarm的返回值问题, 一目了然.
2. pause函数:
pause函数使调用进程挂起, 直到捕捉到一个信号. 它的原型如下:
#include <unistd.h>
int pause();
返回-1, 并将errno设置为EINTR.
这个函数很简单, 由字面意思就可以理解出来"暂停". pause只有在执行了一个信号处理程序并从其返回时, pause才返回.
int pause();
返回-1, 并将errno设置为EINTR.
- 捉拿信号的alarm和pause函数
- Linux Signal (7): 捕获信号的alarm和pause函数
- apue-alarm和pause函数,关于信号
- alarm和pause函数
- alarm和pause函数
- alarm和pause函数
- linux 信号 alarm和pause
- 信号的发送和捕捉函数(alarm、kill、raise、pause、 sleep、abort)
- 信号的发送和捕捉函数(alarm、kill、raise、pause、 sleep、abort)
- Linux环境编程之信号处理(三、利用alarm()和pause()函数实现sleep()函数)
- Linux信号——Sleep函数的模拟实现(利用alarm,pause,sigsuspend函数)
- 利用函数alarm和pause模拟sleep
- linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)
- linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)
- linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)
- linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)
- unix环境高级编程-alarm、pause()与信号处理函数
- 1.信号处理之:kill(),alarm(),pause()函数
- PKCS#3 v1.4 java 语言实现参考
- 内存管理 Memory Management for Android Apps
- Linux学习笔记1
- dom 练习一 访问节点
- spring mvc重复提交解决办法
- 捉拿信号的alarm和pause函数
- 运动轨迹图表算法-已知两圆通过极坐标转换求两圆切线的公式-用于求两物体运动轨迹
- 获取卷屏的高度 - document.documentElement
- spring mvc中redirect/forward:url与拦截器的关系
- Android RefBase类(sp,wp)
- 对Android NDK的理解
- 自己用C#编写的日期选择web自定义控件(有修订)-二十四画生
- Spring mvc redirect 传递参数乱码
- php实现显示数据库中一周内过生日的联系人