国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

信號之sleep函數

2024-06-28 13:28:25
字體:
來源:轉載
供稿:網友
信號之sleep函數
#include <unistd.h>unsigned int sleep(unsigned int seconds);返回值:0或未休眠夠的秒數

此函數使調用進程被掛起,直到滿足以下條件之一:

(1)已經過了seconds所指定的墻上時鐘時間。

(2)調用進程捕捉到一個信號并從信號處理程序返回。

如果alarm信號一樣,由于其他系統活動,實際返回時間比所要求的會遲一些。

在第(1)種情形中,返回值是0。當由于捕捉到某個信號,sleep提早返回時(第(2)種情形),返回值是未睡夠的秒數(所要求的時間減去實際休眠的時間)。

盡管sleep可以用alarm函數(http://www.CUOXin.com/nufangrensheng/p/3515013.html)實現,但這并不是必需的。如果使用alarm,則這兩個函數之間可能會交互作用。

程序清單10-21 sleep的可靠實現

#include "apue.h"static voidsig_alrm(int signo){    /* nothing to do, just returning wakes up sigsuspend() */}unsigned intsleep(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/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清水河县| 禹城市| 石城县| 丹凤县| 玉门市| 德庆县| 县级市| 灵丘县| 达日县| 肇庆市| 邵东县| 商丘市| 行唐县| 富裕县| 闻喜县| 台北县| 迁西县| 蓝山县| 龙岩市| 比如县| 奉新县| 武平县| 乐业县| 五峰| 乌苏市| 孟州市| 姚安县| 绥化市| 镇江市| 宁化县| 定结县| 湟中县| 九江县| 郓城县| 淮北市| 连南| 新干县| 平原县| 红河县| 邯郸市| 临城县|