日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 描述
    • 聲明
    • 參數
    • 返回值
    • 實例
    • 附加解釋
    • 背景知識:C語言中signal函數簡介及使用

描述

C 庫函數 void (*signal(int sig, void (*func)(int)))(int) 設置一個函數來處理信號,即帶有 sig 參數的信號處理程序。

聲明

下面是 signal() 函數的聲明。

void (*signal(int sig, void (*func)(int)))(int)

參數

  • sig – 在信號處理程序中作為變量使用的信號碼。下面是一些重要的標準信號常量:
  • func – 一個指向函數的指針。它可以是一個由程序定義的函數,也可以是下面預定義函數之一:

返回值

該函數返回信號處理程序之前的值,當發生錯誤時返回 SIG_ERR。

實例

下面的實例演示了 signal() 函數的用法。(在linux下運行,windows沒有unistd.h頭文件)

#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h>void sighandler(int);int main() {signal(SIGINT, sighandler);while(1) {printf("開始休眠一秒鐘...\n");sleep(1);}return(0); }void sighandler(int signum) {printf("捕獲信號 %d,跳出...\n", signum);exit(1); } 讓我們編譯并運行上面的程序,這將產生以下結果,且程序會進入無限循環,需使用 CTRL + C 鍵跳出程序。開始休眠一秒鐘... 開始休眠一秒鐘... 開始休眠一秒鐘... 開始休眠一秒鐘... 開始休眠一秒鐘... 捕獲信號 2,跳出...

我在linux下編譯運行,還真是這樣子:

[root@ubuntu /home/yg/arnold_test/20211201_TEST_signal]3# gcc TEST_SIGNAL.c [root@ubuntu /home/yg/arnold_test/20211201_TEST_signal]4# [root@ubuntu /home/yg/arnold_test/20211201_TEST_signal]4# [root@ubuntu /home/yg/arnold_test/20211201_TEST_signal]4# ./a.out 開始休眠一秒鐘... 開始休眠一秒鐘... 開始休眠一秒鐘... 開始休眠一秒鐘... 開始休眠一秒鐘... 開始休眠一秒鐘... ^C捕獲信號 2,跳出...

附加解釋

void (*signal(int sig, void (*func)(int)))(int)

解釋一下該函數的申明怎么讀,后面附帶的兩個(int)的意思是:該符號前的函數指針所對應的函數是帶一個int類型的參數的。比如最外面的,是說signal返回的函數指針所對應的函數是帶int的參數的;里面的,作為參數的函數名是帶一個int參數的。

  • 中間部分:
signal( int sig, void (*func)(int))

signal函數有2個參數,第一個是int,第二個是無返回值,帶一個int參數的函數指針

  • 外圍:
void (*signal(xxx)) (int)

signal函數返回的是一個函數指針,無返回值,有一個int參數

  • 簡化:
typedef void Sigfunc(int)

Sigfunc就代表的就是一個 返回值是一個無返回值,有一個int參數的函數。

最后就成了這樣:

Sigfunc *signal(int, Sigfunc*)

參考文章:C 庫函數 - signal()

背景知識:C語言中signal函數簡介及使用

signal.h是C標準函數庫中的信號處理部分,定義了程序執行時如何處理不同的信號。信號用作進程間通信,報告異常行為(如除零)、用戶的一些按鍵組合(如同時按下Ctrl與C鍵,產生信號SIGINT)。C++中的對應頭文件是csignal。

C語言標準定義了6個信號,都定義在signal.h頭文件中:

(1). SIGABRT:程序異常中止,如調用abort函數。(abort)

(2). SIGFPE:算術運算出錯,如除數為0或溢出。

(3). SIGILL:非法函數映像,如非法指令。

(4). SIGINT:交互的用戶按鍵請求,如同時按下Ctrl+C鍵。

(5). SIGSEGV:無效內存訪問,段錯誤。

(6). SIGTERM:程序的中止請求。

signal.h可能還定義了其它信號,這依賴于具體實現。例如,類Unix系統還定義了15個以上的信號。Visual C++的C標準庫只支持C語言標準規定的6個信號,即對信號處理只提供最小的支持。

signal函數:該函數設置一個函數(回調函數)來處理捕獲到異常信號時需要執行的操作

參考文章:C語言中signal函數簡介及使用

總結

以上是生活随笔為你收集整理的C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 跪求黄色网址 | 在线黄色av网站 | 亚洲一区二区三区高清 | 美女视频黄色在线观看 | 无码国产精品一区二区色情男同 | 午夜av成人 | 欧美精品一二三四区 | 国产成人精品一区二三区四区五区 | 欧美专区第一页 | 欧美一区免费 | 日韩久久久久久久久久 | 亚洲永久无码精品一区二区 | 国产黄色录像片 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 成人毛片观看 | 国产精品久久亚洲7777 | 小柔的淫辱日记(h | 国产91在线高潮白浆在线观看 | 青青草在线观看视频 | 日韩无码专区 | 久久中文字幕视频 | 成人av在线电影 | 国产一区二区成人 | 亚洲少妇在线 | 亚洲自拍激情 | 黄色小视频免费看 | 影音av资源 | 手机在线免费观看av | 在线观看免费国产 | 一区二区三区黄色 | 超碰97人人射妻 | 亚洲色图丝袜 | 亚洲黄色网页 | 69堂在线观看 | 鲁一鲁一鲁一鲁一av | 图片区 小说区 区 亚洲五月 | 国产精品第一 | 国产伦精品一区二区三区免费迷 | 黄色片aaaa| 三级精品在线 | 在线观看亚洲色图 | 欧美z○zo重口另类黄 | 不许穿内裤随时挨c调教h苏绵 | 6—12呦国产精品 | 解开乳罩喂领导吃奶 | 一区二区网 | 精品在线一区 | 日日日操操操 | 99精品一级欧美片免费播放 | 毛片av免费| 欧美深夜在线 | 欧美乱码视频 | 欧美日韩福利视频 | 欧美视频黄色 | 欧美精品v国产精品v日韩精品 | 艳妇乳肉豪妇荡乳av | 无码人妻一区二区三区一 | 中文日韩欧美 | 欧美大片在线观看 | 伊人丁香| 伊人www| 毛片大全在线观看 | 少妇紧身牛仔裤裤啪啪 | 日本黄色免费看 | 综合久久五月天 | 麻豆国产免费 | 日日夜夜中文字幕 | 欧美精品免费在线 | 国产精品偷伦视频免费观看了 | 微拍福利一区二区 | 亚洲一区二区自拍 | 搞逼综合网 | 日本少妇久久久 | 日韩黄色三级视频 | 久久视频一区 | 日本精品一二三 | 中国大陆一级毛片 | 手机av电影在线 | 狠狠搞狠狠干 | 国产精品你懂得 | 91亚洲国产成人精品性色 | 最近国语视频在线观看免费播放 | 91porn在线| 欧美午夜寂寞影院 | 欧美日韩久久久久久 | 色葡萄影院 | 国产精品免费久久久久 | 成人福利片 | 人人澡人人透人人爽 | 亚洲av无码一区二区乱子仑 | 无码人妻aⅴ一区二区三区69岛 | 在线视频日韩欧美 | 国产精品夜色一区二区三区 | 激情视频久久 | 亚洲一区二区久久久 | 黄网av| 国产无码精品在线播放 | 在线视频观看 | 激情五月在线观看 |