欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
signal 和sigaction

要對一個(gè)信號進(jìn)行處理,就需要給出此信號發(fā)生時(shí)系統所調用的處理函數??梢詫σ粋€(gè)特定的信號(除去SIGKILL和SIGSTOP信號)注冊相應的處理函數。注冊某個(gè)信號的處理函數后,當進(jìn)程接收到此信號時(shí),無(wú)論進(jìn)程處于何種狀態(tài),就會(huì )停下當前的任務(wù)去執行此信號的處理函數。

1、注冊信號函數。

  1. #include<signal.h>

  • void(*signal(int signumber,void ((*func)(int))(int)  
  • signumber表示信號處理函數對應的信號。func是一個(gè)函數指針。此函數有一整型參數,并返回void型。其實(shí)func還可以取其他定值如:SIG_IGN,SIG_DFL.

    SIG_IGN表示:忽略signumber所指出的信號。SIG_DFL表示表示調用系統默認的處理函數。signal函數的返回值類(lèi)型同參數func,是一個(gè)指向某個(gè)返回值為空并帶有一個(gè)整型參數的函數指針。其正確返回值應為上次該信號的處理函數。錯誤返回SIG_ERR

    signal示例如下:

    1. #include <stdio.h>   
    2.   
    3. #include <sys/types.h>   
    4.   
    5. #include <stdlib.h>    
    6.   
    7. #include <signal.h>    
    8.   
    9. void func(int sig)   
    10. {  
    11. printf("I get asignal!\n");  
    12. }   
    13. int main()   
    14. {    charbuffer[100];   
    15.   
    16.    if(signal(SIGINT, func) == SIG_ERR)  
    17.      {  
    18.      printf("signalerror exit now\n");  
    19.      exit(0);  
    20.      }  
    21.      printf("pid:%ld\n",(long)getpid());  
    22.   
    23.    for(;;)  
    24.   
    25.      {  
    26.   
    27.      fgets(buffer,sizeof(buffer),stdin);  
    28.   
    29.      printf("bufferis:%s\n",buffer);  
    30.   
    31.      }  
    32.  return 0;   
    33. }   

    通常情況下一個(gè)用戶(hù)進(jìn)程需要處理多個(gè)信號??梢栽谝粋€(gè)程序中注冊多個(gè)信號處理函數。一個(gè)信號可以對應一個(gè)處理函數,同時(shí)多個(gè)信號可以對應一個(gè)處理函數。

    對于SIGINT信號 我們可以用ctrl+c或ctrl+z來(lái)中斷進(jìn)程,來(lái)執行SIGINT注冊的函數。

    2、 高級信號處理。

    在linux系統提供了一個(gè)功能更強的系統調用。

    1. #include <signal.h>   
    2.   
    3. int sigaction(int signumbet,const structsigaction *act,struct sigaction *oldact)  

     此函數除能注冊信號函數外還提供了更加詳細的信息,確切了解進(jìn)程接收到信號,發(fā)生的具體細節。

    struct sigaction的定義如下:在linux2.6.39/include/asm-generic/signal.h中實(shí)現

    1. struct sigaction  
    2.   
    3. {  
    4.   
    5.      void(*sa_handler)(int);  
    6.   
    7.      void(*sa_sigaction)(int,siginfo_t *,void *);  
    8.   
    9.      sigset_tsa_mask;  
    10.   
    11.      intsa_flags;  
    12.   
    13. }  

    siginfo_t在linux2.6.39/include/asm-generic/siginfo.h中實(shí)現:

     

    sa_flags的取值如下表,取0表示選用所有默認選項。

    SA_NOCLDSTOP:用于表示信號SIGCHLD,當子進(jìn)程被中斷時(shí),不產(chǎn)生此信號,當且僅當子進(jìn)程結束時(shí)產(chǎn)生此信號。

    SA_NOCLDWATI:當信號為SIGCHLD,時(shí)可避免子進(jìn)程僵死。

    SA_NODEFER:當信號處理函數正在進(jìn)行時(shí),不堵塞對于信號處理函數自身信號功能。

    SA_NOMASK:同SA_NODEFER

    SA_ONESHOT:當用戶(hù)注冊的信號處理函數被執行過(guò)一次后,該信號的處理函數被設為系統默認的處理函數。

    SA_RESETHAND:同SA_ONESHOT

    SA_RESTART:是本來(lái)不能重新于運行的系統調用自動(dòng)重新運行。

    SA_SIGINFO:表明信號處理函數是由SA_SIGACTION指定的,而不是由SA_HANDLER指定的,它將顯示更多的信號處理函數信息。 

    其實(shí)sinaction完全可以替換signal函數 

    1. #include <stdio.h>    
    2. #include <sys/types.h>    
    3. #include <stdlib.h>     
    4. #include <signal.h>     
    5.   
    6.   
    7. void func(int sig)    
    8.   
    9. {  
    10.   
    11. printf("I get a signal!\n");   
    12.   
    13. }    
    14.   
    15. int main()    
    16.   
    17. {   char buffer[100];    
    18.   
    19.     struct sigaction act;  
    20.     act.sa_handler=func;  
    21.     sigemptyset(&act.sa_mask);  
    22.     act.sa_flags = 0;  
    23.   
    24.     if(sigaction(SIGINT,&act, NULL) == -1)  
    25.     {  
    26.     printf("sigaction error exit now\n");  
    27.     exit(0);  
    28.     }  
    29.   
    30.     printf("pid:%ld\n",(long)getpid());   
    31.   
    32.     for(;;)  
    33.     {  
    34.     fgets(buffer,sizeof(buffer),stdin);  
    35.     printf("buffer is:%s\n",buffer);  
    36.     }  
    37.   
    38.     return 0;    
    39.   
    40. }    
    本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
    打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
    猜你喜歡
    類(lèi)似文章
    signal函數
    Linux Signal (7): sigaction
    sigaction
    Linux環(huán)境進(jìn)程間通信(二): 信號(下)
    linux線(xiàn)程通信:sigwait和pthread_kill
    信號集
    更多類(lèi)似文章 >>
    生活服務(wù)
    分享 收藏 導長(cháng)圖 關(guān)注 下載文章
    綁定賬號成功
    后續可登錄賬號暢享VIP特權!
    如果VIP功能使用有故障,
    可點(diǎn)擊這里聯(lián)系客服!

    聯(lián)系客服

    欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久