Linux下面使用C語言捕獲Ctrl C訊號

2021-08-11 02:37:20 字數 1073 閱讀 9216

**:

在linux下面寫乙個程式,如果程式中出現死迴圈的話,我們就應該在鍵盤上按ctrl+c來終止我們的程式,那麼我們也可以取捕獲這個訊號,然後執行我們自己的訊號處理程式,輸出一些有用的資訊來幫助我們除錯程式,這也算是一中技巧吧,雖然我覺得技巧不是很重要。如果我們不去捕獲這個訊號的話,那麼訊號產生後就去執行os的訊號處理程式。訊號和中斷很像,我們既可以使用os的中斷處理程式,也可以截獲中斷執行自己的中斷處理程式。下面是乙個多執行緒的例子:

#include

#include

#include

#include

#include

#define true 1

void * one(void * no) 

}void * two(void * no) 

}void stop(int signo) 

int main()

編譯上述程式的命令:gcc nuaa.c -o nuaa -l pthread(假設程式所在檔案名位nuaa.c)

注:1.上述程式中建立了兩個執行緒,執行緒執行函式的名字隨便寫,但是執行緒執行函式的格式必須這麼寫。

2.在上述程式中我故意使用了_exit(0);目的是說明乙個問題,曾經有位interviewer(也就是我現在的導師)問我_exit(0)和exit(0)的區別是什麼?我當時說_exit(0)我見過但是沒有使用過,但是我在使用exit(0)是發現在main()函式中使用exit(0)和使用return 0的返回值是一樣的(如何檢視main函式返回值:linux下面可以在shell中檢視, ?表示上乙個程序退出時的狀態數值,用 echo $? 檢視windows下用 echo %errorlevel%,debug的時候,也可以直接檢視返回值),其他我就不知道了。the interviewer看上去不有些不太滿意,直到後來見面的時候(他貌似對我印象很深,見面時我還沒有認出他,他就認出了我,感覺很親切)我第乙個問題就是_exit(0)和exit(0)有何區別?他很和藹地給我解釋了一下:首先exit(0)是通過_exit(0)來實現的,其次,exit(0)回執行一些後續的處理,比如把緩衝區中的內容寫到磁碟的相應位置上,關閉沒有關閉的檔案......而_exit(0)不會做這些事情。

Linux下面C語言多檔案編譯

首先開啟命終端 alt ctrl t 用vim編寫三個檔案main.c,stack.c,stack.h main.c include include stack.h void main stack.h typedef struct stack stack extern void push stack...

C語言Linux下面的Socekt程式設計

實現tcp服務程式 1.呼叫socket網路api,建立套接字檔案 1.1 socket函式 include include int socket int domain,int type,int protocol 1.2功能 建立乙個套接字檔案,然後以檔案形式來操作通訊,不過套接字檔案沒有檔名,li...

C 異常捕獲使用

一.異常 c語言 一般使用函式的返回值來表示是否出錯.c 語言 使用異常機制進行處理 異常語法 1 異常捕獲 trycatch 異常型別 名字 catch 異常型別2 名字2 可以有多個catch 分支 2 異常丟擲 throw 異常物件 異常型別 異常捕獲 void config void 注意 ...