sleep函数原型:unsigned int sleep(unsigned int seconds);
思路:
利用函数alarm函数来计时,产生一个闹钟信号,等alarm发出信号,pause接受到信号然后击穿结束阻塞状态,达到睡眠效果
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
//信号处理函数
void doit(int n) {
}
unsigned int psleep(unsigned int s) {
alarm(s);
pause();//等待信号到来,信号到来产生返回值-1,errno被设置
return (alarm(0));//返回之前的剩余时间
}
int main(void) {
signal(SIGALRM, doit) ;//改变信号的处理函数,为了使进程不终止,SIGALRM是alarm产生的信号,
while(1) {
psleep(2);
printf(".....\n");
}
return 0;
}
命令: tarena@ubuntu:~/day/day33$ a.out
结果: .....
.....
.....
.....//每隔两秒出一次
^C
分析: 先改变信号的处理方式,不改变信号的处理方式的话执行代码之后2S后显示一下“闹钟“就会结束进程
进入死循环,调用psleep函数,在函数中alarm每s秒产生一次信号,每次产生信号pause接收到继续执行下面的代码。
这个程序只是教学用,与工程代码还差的很远,这是基本原理
【C语言】【unix c】实现sleep函数的功能
最新推荐文章于 2023-07-18 15:02:45 发布