linux中sleep詳解例項
在linux程式設計中,有時候會用到定時功能,常見的是用sleep(time)函式來睡眠time秒;但是這個函式是可以被中斷的,也就是說當程式在睡眠的過程中,如果被中斷,那麼當中斷結束回來再執行該程式的時候,該程式會從sleep函式的下一條語句執行;這樣的話就不會睡眠time秒了;
例項如下:
/*************************************************************************
> File Name: sleep.c
> Author:
> Mail:
> Created Time: 2015年11月20日 星期五 20時38分59秒
************************************************************************/
#include<stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void sig_handler(int num)
{
printf("\nrecvive the signal is %d\n", num);
}
int main()
{
int time = 20;
signal(SIGINT, sig_handler);
printf("enter to the sleep.\n");
sleep(time);
printf("sleep is over, main over.\n");
exit(0);
}
從執行結果可以看出,當我按下Ctrl+c發出中斷的時候,被該函式捕獲,當處理完該訊號之後,函式直接執行sleep下面的語句;
備註:sleep(time)返回值是睡眠剩下的時間;
下面的例子是真正的睡眠time時間(不被中斷影響):
/*************************************************************************
> File Name: sleep.c
> Author:
> Mail:
> Created Time: 2015年11月20日 星期五 20時38分59秒
************************************************************************/
#include<stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void sig_handler(int num)
{
printf("\nrecvive the signal is %d\n", num);
}
int main()
{
int time = 20;
signal(SIGINT, sig_handler);
printf("enter to the sleep.\n");
//sleep(time);
do{
time = sleep(time);
}while(time > 0);
printf("sleep is over, main over.\n");
exit(0);
}
備註:其中recevie the signal is 2.表示該訊號是中斷訊號;訊號的具體值如下圖所示:
最後可以檢視sleep函式的man手冊,命令為:man
3 sleep
相關文章
- 例項詳解 Linux 中的 fork() 函式Linux函式
- curl例項詳解
- sudo 詳解+例項
- linux下find,xargs命令詳解和例項Linux
- 元件例項 $el 詳解元件
- Crontab例項-命令詳解
- tcl/tk例項詳解——glob使用例解
- Linux NFS典型例項及許可權詳解LinuxNFS
- 並查集例項詳解並查集
- Oracle 例項恢復詳解Oracle
- Linux與windows檔案傳輸詳解及例項LinuxWindows
- java執行緒中yield(),sleep(),wait()區別詳解Java執行緒AI
- Java開發中的事件驅動模型例項詳解Java事件模型
- 例項詳解構建數倉中的行列轉換
- Android 中Message,MessageQueue,Looper,Handler詳解+例項AndroidOOP
- LINUX Shell指令碼程式設計例項詳解(一)上Linux指令碼程式設計
- Linux下雙網路卡繫結bond配置例項詳解Linux
- EventBus詳解及簡單例項單例
- CSS例項詳解:Flex佈局CSSFlex
- PHP生成日曆(例項詳解)PHP
- FTP命令詳解(含操作例項)FTP
- python閉包詳解(例項)Python
- .Net設計模式例項詳解設計模式
- 【函式】oracle translate() 詳解+例項函式Oracle
- Linux中head命令例項Linux
- Linux中printf命令使用例項Linux
- [CCNA圖文筆記]-25-幀中繼例項詳解筆記中繼
- PHP7 新增功能詳解(例項)PHP
- Spring事務管理(詳解+例項)Spring
- 50個典型電路例項詳解
- 閉包用法結合例項詳解
- Oracle阻塞(blockingblocked)例項詳解OracleBloC
- tcl/tk例項詳解——catch和errorError
- 例項解說Linux中fdisk分割槽使用方法(轉)Linux
- Linux iostat命令詳解和使用例項(磁碟操作監控工具)LinuxiOS
- WPF中輕鬆生成動態圖表:例項詳解(MVVM模式)MVVM模式
- Linux 中的 JQ 命令使用例項Linux
- Linux中ip命令的使用例項Linux