国产探花免费观看_亚洲丰满少妇自慰呻吟_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/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苍南县| 江西省| 河津市| 旌德县| 贺州市| 元谋县| 曲水县| 宿州市| 梨树县| 福贡县| 务川| 隆尧县| 海盐县| 大余县| 武冈市| 名山县| 大新县| 乐山市| 龙口市| 新源县| 阿尔山市| 元朗区| 昭苏县| 阳原县| 昭觉县| SHOW| 宜章县| 雅江县| 青河县| 吉隆县| 搜索| 仪陇县| 丹巴县| 宜黄县| 万载县| 三河市| 上杭县| 黔西县| 山东| 旬阳县| 宣武区|