sigaction()函數

sigaction函數 ???

修改信號處理動作(通常在Linux用其來注冊一個信號的捕捉函數)

??? int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);? 成功:0;失敗:-1,設置errno

參數:

act:傳入參數,新的處理方式。

?????? ?????? oldact:傳出參數,舊的處理方式。??????????????????????????????????????????????????????????????? ???????????????????? 【signal.c】

struct sigaction結構體

??? struct sigaction {

??????? void???? (*sa_handler)(int);

??????? void???? (*sa_sigaction)(int, siginfo_t *, void *);

??????? sigset_t?? sa_mask;

??????? int?????? sa_flags;

??????? void???? (*sa_restorer)(void);

??? };

?????? sa_restorer:該元素是過時的,不應該使用,POSIX.1標準將不指定該元素。(棄用)

?????? sa_sigaction:當sa_flags被指定為SA_SIGINFO標志時,使用該信號處理程序。(很少使用)?

重點掌握:

?????? ① sa_handler:指定信號捕捉后的處理函數名(即注冊函數)。也可賦值為SIG_IGN表忽略 或 SIG_DFL表執行默認動作

?????? ② sa_mask: 調用信號處理函數時,所要屏蔽的信號集合(信號屏蔽字)。注意:僅在處理函數被調用期間屏蔽生效,是臨時性設置。

?????? ③ sa_flags:通常設置為0,表使用默認屬性。???

/***
signaction.c
***/
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<unistd.h>
#include<signal.h>void docatch(int signo)
{printf("%d signal is catch\n",signo);
}int main()
{int ret;struct sigaction act;act.sa_handler = docatch;sigemptyset(&act.sa_mask);sigaddset(&act.sa_mask,SIGQUIT);act.sa_flags = 0;ret = sigaction(SIGINT,&act,NULL);if(ret < 0 ){perror("sigaction error");exit(1);}while(1);return 0;
}

?

轉載于:https://www.cnblogs.com/wanghao-boke/p/11333984.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384876.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384876.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384876.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內核實現信號捕捉原理

信號捕捉特性 進程正常運行時&#xff0c;默認PCB中有一個信號屏蔽字&#xff0c;假定為☆&#xff0c;它決定了進程自動屏蔽哪些信號。當注冊了某個信號捕捉函數&#xff0c;捕捉到該信號以后&#xff0c;要調用該函數。而該函數有可能執行很長時間&#xff0c;在這期間所屏蔽…

pause函數

pause函數 調用該函數可以造成進程主動掛起&#xff0c;等待信號喚醒。調用該系統調用的進程將處于阻塞狀態(主動放棄cpu) 直到有信號遞達將其喚醒。 int pause(void); 返回值&#xff1a;-1 并設置errno為EINTR 返回值&#xff1a; ① 如果信號的默認處理動作是終止進程&a…

SIGCHLD函數

SIGCHLD的產生條件 子進程終止時 子進程接收到SIGSTOP信號停止時 子進程處在停止態&#xff0c;接受到SIGCONT后喚醒時 借助SIGCHLD信號回收子進程 子進程結束運行&#xff0c;其父進程會收到SIGCHLD信號。該信號的默認處理動作是忽略。可以捕捉該信號&#xff0c;在捕捉函數中…

成員訪問控制符重載

類成員訪問運算符&#xff08;->&#xff09;可以被重載&#xff0c;但它比較麻煩它被定義用于為一個類賦予“指針”行為。運算符->必須是一個成員函數。如果使用了->運算符&#xff0c;返回類型必須是指針或者是類的對象。 運算符->通常與指針引用運算符 * 結合使…

C++動態內存

C程序中內存分為兩個部分 棧&#xff1a;在函數內部聲明的所有變量都將占用棧內存。 堆&#xff1a;這是程序中未使用的內存&#xff0c;在程序中可用于動態分配內存。 在很多時候&#xff0c;我們無法提前預知需要多少內存來存儲某個變量的特定信息&#xff0c;所需內存的大小…

文件和流

iostream標準庫提供了cin和cout方法用于標準輸入讀取流和向標準輸出寫入流。 從文件讀取流和向文件寫入流&#xff0c;需要用到fstream庫。它定了三個數據類型 數據類型 描述 ofstream 該數據類型表示輸出文件流&#xff0c;用于創建文件并向文件寫入信息 ifstream 該數據…

C++預處理器

預處理器是一些指令&#xff0c;指示表一起在實際編譯之前所需要完成的預處理。 所有的預處理器指令都是以井號(#)開頭&#xff0c;只有空格字符可以出現在預指令處理之前。預處理指令不是C語句&#xff0c;所以他們不會以分號(;)結尾。 #define預處理 #define預處理指令用于創…

C++信號處理

信號是由操作系統傳給進程的中斷&#xff0c;會提早終止一個程序。在UNIX、LINUX、Mac OS或windows系統上&#xff0c;可以通過按Ctrlc產生中斷。有些信號不能被程序捕獲&#xff0c;但是下表所列信號可以在程序中被捕獲&#xff0c;并可以基于信號采取適當的動作。這些信號是定…

Python—“helloworld”

接觸一門計算機新語言&#xff0c;第一件事就是要準備好一個編譯器用來打代碼。 網上很多環境搭建的方法&#xff0c;具體參照https://www.runoob.com/python/python-install.html 由于我之前一直在使用Ubuntu的gcc編譯&#xff0c;恰好也可以運行python程序&#xff0c;我也就…

創建線程

pthread_self函數 獲取線程ID。其作用對應進程中 getpid() 函數。 pthread_t pthread_self(void); 返回值&#xff1a;成功&#xff1a;0&#xff1b; 失敗&#xff1a;無&#xff01; 線程ID&#xff1a;pthread_t類型&#xff0c;本質&#xff1a;在Linux下為無符號…

C/C++頭文件

C/C頭文件一覽C、傳統 C#include <assert.h> //設定插入點#include <ctype.h> //字符處理#include <errno.h> //定義錯誤碼#include <float.h> //浮點數處理#include <fstream.h> //文件輸入&#xff0f;輸出#include <iomanip.h> //參數化…

Python變量類型

變量存儲在內存中的值&#xff0c;這就意味著在創建變量時會在內存開辟一個空間。 基于變量的數據類型&#xff0c;解析器會分配指定內存&#xff0c;并決定什么數據可以被存儲在內存中。 因此變量可以指定不同的數據類型&#xff0c;這些變量可以存儲整數、小數、或字符。 變量…

線程退出

pthread_exit函數 將單個線程退出 void pthread_exit(void *retval); 參數&#xff1a;retval表示線程退出狀態&#xff0c;通常傳NULL 思考&#xff1a;使用exit將指定線程退出&#xff0c;可以嗎&#xff1f; …

線程分離

pthread_detach函數 實現線程分離 int pthread_detach(pthread_t thread); 成功&#xff1a;0&#xff1b;失敗&#xff1a;錯誤號 線程分離狀態&#xff1a;指定該狀態&#xff0c;線程主動與主控線程斷開關系。線程結束后&#xff0c;其退出狀態不由其他線程獲取&#x…

線程知識點

控制原語對比 進程 線程 fork pthread_create exit pthread_exit wait pthread_join kill pthread_cancel getpid pthread_self 命名空間 線程屬性 本節作為指引性介紹&…

讀寫鎖

讀寫鎖 與互斥量類似&#xff0c;但讀寫鎖允許更高的并行性。其特性為&#xff1a;寫獨占&#xff0c;讀共享。 讀寫鎖狀態&#xff1a; 一把讀寫鎖具備三種狀態&#xff1a; 1. 讀模式下加鎖狀態 (讀鎖) 2. 寫模式下加鎖狀態 (寫鎖) 3. 不加鎖狀態 讀寫鎖特性&#xff1a; 讀…

條件變量

條件變量&#xff1a; 條件變量本身不是鎖&#xff01;但它也可以造成線程阻塞。通常與互斥鎖配合使用。給多線程提供一個會合的場所。 主要應用函數&#xff1a; pthread_cond_init函數 pthread_cond_destroy函數 pthread_cond_wait函數 pthread_cond_timedwait函數 pthread_c…

文件鎖

借助 fcntl函數來實現鎖機制。 操作文件的進程沒有獲得鎖時&#xff0c;可以打開&#xff0c;但無法執行read、write操作。 fcntl函數&#xff1a; 獲取、設置文件訪問控制屬性。 int fcntl(int fd, int cmd, ... /* arg */ ); 參2&#xff1a; F_SETLK (struct flock *) 設置…

進程間同步

互斥量mutex 進程間也可以使用互斥鎖&#xff0c;來達到同步的目的。但應在pthread_mutex_init初始化之前&#xff0c;修改其屬性為進程間共享。mutex的屬性修改函數主要有以下幾個。 主要應用函數&#xff1a; pthread_mutexattr_t mattr 類型&#xff1a; 用于定義…

Python3字符串

字符串是Python中最常用的數據類型&#xff0c;可以使用單引號或雙引號來創建字符串 創建字符串很簡單&#xff0c;為變量分配一個值即可。 val1 ‘hello world’ var2 “Runoob” Python訪問字符串的值 Python不支持單字符類型&#xff0c;單字符在Python中也是作為 一個字符…