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
相關文章
- 元件例項 $el 詳解元件
- Linux與windows檔案傳輸詳解及例項LinuxWindows
- Linux中head命令例項Linux
- LINUX Shell指令碼程式設計例項詳解(一)上Linux指令碼程式設計
- Linux中printf命令使用例項Linux
- CSS例項詳解:Flex佈局CSSFlex
- EventBus詳解及簡單例項單例
- Spring事務管理(詳解+例項)Spring
- Linux IO模式及 select、poll、epoll詳解(含部分例項原始碼)Linux模式原始碼
- 例項詳解構建數倉中的行列轉換
- Java開發中的事件驅動模型例項詳解Java事件模型
- Linux 中 ss 命令的使用例項Linux
- Linux 中的 JQ 命令使用例項Linux
- Linux中ip命令的使用例項Linux
- Linux中的basename命令使用例項Linux
- Linux系統中head命令例項Linux
- PHP7 新增功能詳解(例項)PHP
- 50個典型電路例項詳解
- MySQL共享鎖:使用與例項詳解MySql
- Linux中執行多個MySQL例項LinuxMySql
- Oracle minus用法詳解及應用例項Oracle
- 正規表示式分組例項詳解
- Python程式和執行緒例項詳解Python執行緒
- WPF中輕鬆生成動態圖表:例項詳解(MVVM模式)MVVM模式
- Spring中Bean的例項化詳細流程SpringBean
- Linux 中 rsync 備份資料使用例項Linux
- Linux系統中的basename命令使用例項Linux
- Linux中rsync備份資料使用例項Linux
- Linux中的sleep、usleep、nanosleep、poll和selectLinuxNaN
- Linux中Sleep和Wait命令的使用方式LinuxAI
- linux中iptables詳解Linux
- axios模擬GET請求例項及詳解iOS
- Navigation問題詳解——Fragment建立新的例項NavigationFragment
- 例項詳解 Java 死鎖與破解死鎖Java
- Linux被DDOS&CC攻擊解決例項Linux
- Linux命令:grep命令AND、OR、NOT例項Linux
- [譯]例項詳解防抖與節流(乾貨!!!)
- 例項詳解如何構建動態SQL語句SQL
- MySQL 序列 AUTO_INCREMENT詳解及例項程式碼MySqlREM