linux中的sleep怎麽用
sleep函數:#include <unistd.h>unsigned int sleep(unsigned int seconds);此函數使調用進程被掛起,直到滿足以下條件之壹:1)已經過了seconds所指定的墻上時鐘時間2)調用進程捕捉到壹個信號並從信號處理程序返回註:由於其他系統活動,實際返回時間比所要求的會遲壹些,像alarm壹樣。sleep的返回值:1)在上述第壹種情形中,返回值是02)當由於捕捉到某個信號sleep提前返回時,返回值是未睡夠的時間(所要求的時間減去實際休眠時間)看看下面的例子,猜猜sleep()的返回值是多少1 #include <stdio.h>2 #include <time.h>3 #include <signal.h>4 5 #define DIAPAUSE 30 //sleep time 30s6 #define TIMEOUT 57 8 void sigalrm(int signo);9 10 int main()11 {12 struct sigaction sa;13 14 sa.sa_handler = sigalrm;15 sa.sa_flags = 0;16 sigemptyset(&sa.sa_mask);17 if(sigaction(SIGALRM, &sa, NULL) < 0)18 {19 printf("sigaction error!\n");20 return;21 }22 23 while(1)24 {25 printf("alarm(TIMEOUT)...\n");26 alarm(TIMEOUT);27 printf("...\n");28 printf("sleep(DIAPAUSE) == %d\n", sleep(DIAPAUSE));29 }30 31 return 0;32 }33 34 void sigalrm(int signo)35 {36 printf("timeout...\n");37 return;38 }sleep函數的返回值是25。如果將TIMEOUT的值改為大於DIAPAUSE的值,如50的話,sleep函數在睡夠了DIAPAUSE後就會返回,返回值為0。如果我們即需要alarm又需要sleep壹個預訂的事件怎麽辦?如上面的例子,我想在...後再sleep 30s然後再進入循環。這在socket通訊過程中,在設置超時的時候可能會用到。註意到alarm函數。#include <unistd.h>unsigned int alarm(unsigned int senconds);使用alarm函數可以設置壹個計時器,在將來某個指定的時間該計時器會超時。當計時器超時時,產生SIGALARM信號。如果不捕捉或不忽略此信號,則其默認動作是終止調用該alarm函數的進程。每個進程只能有壹個鬧鐘時鐘,如果在調用alarm時,已經為該進程設置過鬧鐘時鐘,而且它還沒有超時,則將該鬧鐘時鐘的余留值作為本次alarm函數調用的返回值。以前登記的鬧鐘時鐘將被新值代替。如果有以前為進程登記的尚未超過的鬧鐘時鐘,而且本次調用的seconds為0,則取消以前的鬧鐘時鐘,其余留值仍作為alarm的返回值。(以上這幾段話摘自《unix環境高級編程》)。所以在while循環的printf("...\n");後面添加壹句alarm(0);就可以滿足我的要求,即在...後再sleep 30s然後再進入循環。