#include <unistd.h>
unsigned int sleep(unsigned int seconds);
返回值:0或未休眠够的秒数

此函数使调用进程被挂起,直到满足以下条件之一:

(1)已经过了seconds所指定的墙上时钟时间。

(2)调用进程捕捉到一个信号并从信号处理程序返回。

如果alarm信号一样,由于其他系统活动,实际返回时间比所要求的会迟一些。

在第(1)种情形中,返回值是0。当由于捕捉到某个信号,sleep提早返回时(第(2)种情形),返回值是未睡够的秒数(所要求的时间减去实际休眠的时间)。

尽管sleep可以用alarm函数(http://www.cnblogs.com/nufangrensheng/p/3515013.html)实现,但这并不是必需的。如果使用alarm,则这两个函数之间可能会交互作用。

程序清单10-21 sleep的可靠实现

#include "apue.h"static void
sig_alrm(int signo)
{/* nothing to do, just returning wakes up sigsuspend() */
}unsigned int
sleep(unsigned int nsecs)
{struct sigaction    newact, oldact;sigset_t        newmask, oldmask, suspmask;unsigned int         unslept;/* set our handler, save previous information */newact.sa_handler = sig_alrm;sigemptyset(&newact.sa_mask);newact.sa_flags = 0;sigaction(SIGALRM, &newact, &oldact);/* block SIGALRM and save current signal mask */sigemptyset(&newmask);sigaddset(&newmask, SIGALRM);sigprocmask(SIG_BLOCK, &newmask, &oldmask);alarm(nsecs);suspmask = oldmask;sigdelset(&suspmask, SIGALRM);    /* make sure SIGALRM isn't blocked */sigsuspend(&suspmask);        /* wait for any signal to be caught *//* some signal has been caught, SIGALRM is now blocked */unslept = alarm(0);sigaction(SIGALRM, &oldact, NULL);    /* reset previous action *//* reset signal mask, which unblocks SIGALRM */sigprocmask(SIG_SETMASK, &oldmask, NULL);return(unslept);
}

本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/

转载于:https://www.cnblogs.com/nufangrensheng/p/3517365.html

信号之sleep函数相关推荐

  1. Linux 信号signal处理函数--转

    alarm(设置信号传送闹钟) 相关函数 signal,sleep 表头文件 #include<unistd.h> 定义函数 unsigned int alarm(unsigned int ...

  2. _Linux系统编程—信号集操作函数

    先来回顾一下未决信号集是怎么回事. 信号从产生到抵达目的地,叫作信号递达.而信号从产生到递达的中间状态,叫作信号的未决状态.产生未决状态的原因有可能是信号受到阻塞了,也就是信号屏蔽字(或称阻塞信号集, ...

  3. 对信号集操作函数的使用方法和顺序

    对信号集操作函数的使用方法和顺序如下: ①      使用signal或sigaction函数安装和登记信号的处理. ②      使用sigemptyset等定义信号集函数完成对信号集的定义. ③  ...

  4. 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,

     1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL                                            默 ...

  5. QT信号和槽函数学习笔记

    //connect 函数有4个参数 分别是 发送者 信号.接受者 ,槽 //connect(sender,signal,receiver,slot) /* * 信号和槽 * 信号 就是一个普通的函数 ...

  6. Linux信号之signal函数

    1. 信号概述 何为信号:信号就是由用户.系统或进程发送给目标进程的信息,以通知目标进程中某个状态的改变或是异常. 信号产生:总体来说,其产生的条件有两种,分别是:硬件和软件原因,又称为:硬中断和软中 ...

  7. Linux 信号signal处理函数

    alarm(设置信号传送闹钟) 相关函数 signal,sleep 表头文件 #include<unistd.h> 定义函数 unsigned int alarm(unsigned int ...

  8. 信号集操作函数,信号未决、阻塞、递达

    转载:信号集操作函数,信号阻塞与未决 一,信号集及相关操作函数 信号集被定义为一种数据类型: typedef struct { unsigned long sig[_NSIG_WORDS]: } si ...

  9. linux的基础知识——signal信号捕捉,信号集操作函数

    文章目录 1.signal捕捉信号 2.信号集操作函数 3.sigprocmask函数 4.sigpending函数 5.例子1:打印某个进程未决信号集 6.例子2:signal函数的注册捕捉执行函数 ...

  10. Linux系统编程32:进程信号之详解信号集操作函数(sigset_t ,sigpending,sigprocmask)

    文章目录 (1)sigset_t (2)信号集操作函数 (1)sigset_t 前面说过,未决和阻塞分别用位图来表示,于是我们把保存位图这样的数据类型称为sigset_t,sigset_t称为信号集, ...

最新文章

  1. python怎么读取txt文件内容然后保存到excel-Python实现读取txt文件并转换为excel的方法示例...
  2. ios微信小程序下拉刷新怎么配_为什么他的下拉刷新是个动画效果?
  3. python3讨论交流地_讨论 - 廖雪峰的官方网站
  4. linux磁盘使用情况脚本,技术|用 Linux Shell 脚本来监控磁盘使用情况并发送邮件...
  5. lamba统计最大值,最小值,平均值,总和,个数
  6. 三星电子第二季芯片需求大增 但手机销售疲软
  7. 想要在Mac 上运行 Windows 程序 不需要虚拟机也可以
  8. C++对象模型——关于对象(第一章)
  9. 全国大学生数学建模竞赛历年赛题及优秀论文(链接见ping论)
  10. 金山打字通计算机英语,金山打字通英文版
  11. 手机计算机文件夹加密文件,手机文件夹加密锁软件加密步骤【图文教程】
  12. “80后”博士,晋升正厅!
  13. Cannot get a text value from a numeric cell
  14. [软件人生]写书与程序员
  15. 用Qt做的拼图小游戏
  16. R3DS Wrap基本使用方法
  17. flutter Vertical viewport was given unbounded height
  18. 小行星轨道 matlab,小行星轨道问题的建模与求解数学建模论文.doc
  19. 解决Angular Kendo UI 导出PDF中文乱码
  20. fastreport在delphi中的使用

热门文章

  1. 怀黄佩紫的拼音及解释
  2. 直播间越播越没人,大部分刚开始做直播电商的人都会这样
  3. 小企业如何才能做强做大?
  4. 家里的穿墙的网线不好用了,想换一根,换不了,不走明线有什么好办法?
  5. python入门——P49乱入:生成器
  6. 改进后的新String类
  7. SQL Server警报解决性能问题:如何创建和使用SQL Server警报
  8. aws rds监控慢sql_探索AWS RDS SQL Server上SQL Server集成服务(SSIS)
  9. integration_Integration Services性能最佳实践–写目标
  10. 如何创建和配置SQL Server代理警报