您的位置:首页 > 其它

UnixC 学习之自己实现sleep()函数

2020-01-15 06:28 96 查看
  1. pause(2)
    #include <unistd.h>
    int pause(void);
    功能:等待信号,只有进程收到信号,信号处理函数被调用后,pause(2)才返回,否则处于阻塞状态。
    返回值:返回-1 errno被设置
    #include <signal.h>
    #include <unistd.h>
    #include <stdio.h>
    
    unsigned int t_sleep(unsigned int);
    void handle(int);
    
    int main(void){
    unsigned int n = t_sleep(5);
    if(0==n)
    printf("time is over...\n");
    return 0;
    }
    
    unsigned int t_sleep(unsigned int seconds){
    signal(14, handle);//自定义14号信号,即SIGALRM信号
    alarm(seconds);//seconds秒后发出SIGALRM信号
    pause();//阻塞,直到SIGALRM信号被handle处理结束
    return alarm(0);//如果pause函数被其他信号唤醒,那么alarm还是在计数的
    //过使用alarm(0)取消它并得到它的剩余时间
    }
    
    void handle(int n){
    return ;
    }
    执行效果:程序在5秒之后结束。
    总结:该t_sleep和sleep并不一样,只是大概相同,假设有alarm(2)放在sleep(5)前边时,则两秒后sleep(5)会被打断,而t_sleep()不会。
  • 点赞
  • 收藏
  • 分享
  • 文章举报
菜菜菜纪良 发布了70 篇原创文章 · 获赞 3 · 访问量 2228 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: