日韩性视频-久久久蜜桃-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一区二区三区在线观看 | 五月婷婷视频在线观看 | 97爱爱| 亚洲综合三区 | 日本一区二区三区免费电影 | 人人做人人爱人人爽 | 性生活视屏 | 丰满双乳秘书被老板狂揉捏 | 久久精品国产亚洲AV黑人 | 欧美成人aaaaⅴ片在线看 | 日韩欧美一区在线观看 | 亚洲第一大网站 | 女人一级一片30分 | 国产精品污www在线观看 | 欧美xxxx视频| 国内精品在线播放 | 天海翼av在线播放 | 久久精品123 | 亚洲精品一区二区口爆 | 日韩中文字幕在线 | 国产精品亚洲专区无码牛牛 | 日韩淫片 | 影音先锋亚洲成aⅴ人在 | julia一区| 久久久艹 | 欧美va天堂 | 91搞| 狠狠干干干 | 亚洲精品视频国产 | 久久久888 | 久久中文字幕人妻熟av女蜜柚m | 一区二区三区四区视频在线观看 | 欧美日韩视频在线播放 | 国产成人一区 | 亚洲一区二区美女 | 久久久久久综合 | 精品人妻在线视频 | 久草久草久草 | 欧美一区二区黄片 | 一曲二曲三曲在线观看中文字幕动漫 | 久久免费激情视频 | 9久久9毛片又大又硬又粗 | 欧美色图俺去了 | 亚洲色图国产精品 | 久久精品人妻av一区二区三区 | 国内外免费激情视频 | 丁香六月激情 | 秋霞av鲁丝片一区二区 | 玖玖爱资源站 | 欧洲自拍一区 | 美国毛片网站 | 国产亚洲精品久久久久动 | 久久r精品| 午夜精品一区二区三区在线观看 | 亚洲综合激情网 | 日韩黄色a级片 | 欧美日韩一本 | 97小视频| 色小姐在线视频 | 懂色av中文一区二区三区天美 | 国产成人免费片在线观看 | 青青草视频网站 | 在线观看国产一级片 | 日韩成人精品在线观看 | 国产精品一区二区免费在线观看 | 五月天黄色小说 | 人人揉人人 | hd丰满圆润的女人hd | 亚洲色偷精品一区二区三区 | 一本色道久久亚洲综合精品蜜桃 | 亚洲成av人片在线观看 | 日日爽日日操 | 熟女视频一区 | 日韩资源在线观看 | 波波野结衣 | 国产高清一二三区 | 精品人妻av一区二区三区 | 亚洲福利天堂 | 久久人人爽人人爽人人片亚洲 | 337p日本大胆噜噜噜噜 | 一区二区三区三区在线 | 男女插鸡视频 | 凹凸国产熟女精品视频 | 超碰97人| 黑丝美女一区二区 | 91视频看片 | 国内自拍视频在线播放 | 激情五月亚洲 | 成人午夜激情影院 | 香蕉久久夜色精品国产使用方法 | 99久久久无码国产精品性黑人 | 久久婷婷婷 | 日韩阿v | 欧洲人妻丰满av无码久久不卡 | 人日人视频 |