linux中alarm函數和pause函數詳解實例


alarm(time);執行之后告訴內核,讓內核在time秒時間之后向該進程發送一個定時信號,然后該進程捕獲該信號並處理;
pause()函數使該進程暫停讓出CPU,但是該函數的暫停和前面的那個sleep函數的睡眠都是可被中斷的睡眠,也就是說收到了中斷信號之后再
重新執行該進程的時候就直接執行pause()和sleep()函數之后的語句;
下面是一個定時2秒的實例:

/*************************************************************************
	> File Name: alarm.c
	> Author: 
	> Mail: 
	> Created Time: 2015年11月20日 星期五 21時12分52秒
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

void sig_handler(int num)
{
    printf("receive the signal %d.\n", num);
}

int main()
{
    signal(SIGALRM, sig_handler);

    alarm(2);

    while(1){
        pause();
        printf("pause is over.\n");
    }

    exit(0);
}

如果我們想程序每2秒都定時一下,這樣實現也很簡單,我們在處理定時信號的函數中再次定時2秒;實例如下:

/*************************************************************************

	> File Name: alarm.c

	> Author: 

	> Mail: 

	> Created Time: 2015年11月20日 星期五 21時12分52秒

 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

void sig_handler(int num)
{
    printf("receive the signal %d.\n", num);
    alarm(2);
}

int main()
{
    signal(SIGALRM, sig_handler);
alarm(2);
while(1){ pause(); printf("pause is over.\n"); } exit(0); }

可以看出程序每隔2秒就會收到信號14,也就是SIGALRM信號;並且當處理完該信號之后,直接執行pause()函數下面的語句;說明pause()是可被中斷的暫停;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM