signal sigaction alarm函數

1、信號是一種異步通信機制(和單片機裏面的中斷很像)

2、信號的目的:用來通信

3、信號的本質是int 型的數字編號,在/usr/include/i386-linux-gnu/bits/signum.h被宏定義(ubuntu系統)

4、常見的信號介紹

(1)SIGINT             2                                Ctrl+C是OS送給前臺進程組的每一個進程

(2)SIGABRT         6                                調用abort函數,進程異常終止

(3)SIGPOLL         8                                 指示一個異步IO

(4)SIGKILL            9                                殺死進程的終極辦法
(5)SIGSEGV         11                              無效存儲訪問時OS發出該信號
(6)SIGPIPE           13                             涉及管道和socket
(7)SIGALRM            14                          涉及alarm函數的實現
(8)SIGTERM            15                          kill命令發送的OS默認終止信號
(9)SIGCHLD            17                          子進程終止或停止時OS向其父進程發此信號

5、寫了一個示例代碼

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

void func_alarm(int sig)
{
    if(sig != SIGALRM)
    {
        return;
    }
    printf("alarm happened\n");
}


int main(void)
{
    int ret = -1;
//    signal(SIGALRM,func_alarm);   //signal的用法
    struct sigaction *act;
    act->sa_handler = func_alarm;   //c語言中結構指針和結構體成員名用->
    sigaction(SIGALRM,act,NULL);    //查man手冊


    ret = alarm(5);
    printf("1st alarm ret = %d\n",ret);//ret = 0 表示alarm成功
    sleep(3);
    ret = alarm(5);
    printf("2st alarm ret = %d\n",ret);//ret = 2 表示alarm距離上次警報剩2s
    sleep(2);
    ret = alarm(0);
    printf("3st alarm ret = %d\n",ret);//ret = 3 同上,alarm(0)取消警報
    while(1);
    return 0;
}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章