目前做網(wǎng)站流行的是什么建站服務(wù)
文章目錄
- 1 標(biāo)準(zhǔn)庫
- 1.1 診斷assert.h
- 1.2 字符類別測試ctype.h
- 1.3 錯(cuò)誤處理errno.h
- 1.4 整型常量limits.h
- 1.5 地域環(huán)境locale.h
- 1.6 數(shù)學(xué)函數(shù)math.h
- 1.7 非局部跳轉(zhuǎn)setjmp.h
- 1.8 可變參數(shù)表stdarg.h
- 1.9 公共定義stddef.h
- 1.10 輸入輸出stdio.h
- 1.11 實(shí)用函數(shù)stdlib.h
- 1.12 日期與時(shí)間函數(shù)time.h
- 1.13 信號signal.h
1 標(biāo)準(zhǔn)庫
1.1 診斷assert.h
assert.h中只定義了一個(gè)帶參的宏assert,其定義形式如下:
void assert (int 表達(dá)式)
assert宏用于為程序增加診斷功能,它可以測試一個(gè)條件并可能使程序終止。 在執(zhí)行語句:assert(表達(dá)式);
時(shí),如果表達(dá)式為0,則在終端顯示一條信息:
Assertion failed: 0, file 源文件名, line 行號
Abnormal program termination
然后調(diào)用abort終止程序的執(zhí)行。 在assert.h中,帶參宏assert是被定義為條件編譯的,如果在源文件中定義了宏NDEBUG,則即使包含了頭文件,assert宏也將被忽略。
1.2 字符類別測試ctype.h
在頭文件中定義了一些測試字符的函數(shù)。在這些函數(shù)中,每個(gè)函數(shù)的參數(shù)都是整型int,而每個(gè)參數(shù)的值或者為EOF,或者為char類型的字符。中定義的標(biāo)準(zhǔn)函數(shù)列表如下:
ctype.h 中定義的函數(shù)
函數(shù)定義 | 函數(shù)功能簡介 |
---|---|
int isalnum(int c) | 檢查字符是否是字母或數(shù)字 |
int isalpha(int c) | 檢查字符是否是字母 |
int isascii(int c) | 檢查字符是否是ASCII碼 |
int iscntrl(int c) | 檢查字符是否是控制字符 |
int isdigit(int c) | 檢查字符是否是數(shù)字字符 |
int isgraph(int c) | 檢查字符是否是可打印字符 |
int islower(int c) | 檢查字符是否是小寫字母 |
int isprint(int c) | 檢查字符是否是可打印字符 |
int ispunct(int c) | 檢查字符是否是標(biāo)點(diǎn)字符 |
int isspace(int c) | 檢查字符是否是空格符 |
int isupper(int c) | 檢查字符是否是大寫字母 |
int isxdigit(int c) | 檢查字符是否是十六進(jìn)制數(shù)字字符 |
int toupper(int c) | 將小寫字母轉(zhuǎn)換為大寫字母 |
int tolower(int c) | 將大寫字母轉(zhuǎn)換為小寫字母 |
1.3 錯(cuò)誤處理errno.h
errno.h中定義了兩個(gè)常量,一個(gè)變量。
EDOM
:它表示數(shù)學(xué)領(lǐng)域錯(cuò)誤的錯(cuò)誤代碼。
ERANGE
:它表示結(jié)果超出范圍的錯(cuò)誤代碼。
errno
:這是一個(gè)變量,該值被設(shè)置成用來指出系統(tǒng)調(diào)用的錯(cuò)誤類型。
1.4 整型常量limits.h
在limits.h頭文件中定義了一些表示整型大小的常量。下面給出這些常量的字符表示以及含義,見下表。
limits.h中定義的字符常量
字符常量 | 取值 | 含義 |
---|---|---|
CHAR_BIT | 8 | char類型的位數(shù) |
CHAR_MAX | 255或127 | char類型最大值 |
CHAR_MIN | 0或-127 | char類型最小值 |
INT_MIN | -32767 | int類型最小值 |
INT_MAX | 32767 | int類型最大值 |
LONG_MAX | 2147483647 | long類型最大值 |
LONG_MIN | -2147483647 | long類型最小值 |
SCHAR_MAX | 127 | signed char 類型最大值 |
SCHAR_MIN | -127 | signed char 類型最小值 |
SHRT_MAX | 32767 | short類型的最大值 |
SHRT_MIN | -32767 | short類型的最小值 |
UCHAR_MAX | 255 | unsigned char 類型最大值 |
UINT_MAX | 65535 | unsigned int 類型最大值 |
ULONG_MAX | 4294967295 | unsigned long 類型最大值 |
USHRT_MAX | 65535 | unsigned short類型的最大值 |
1.5 地域環(huán)境locale.h
在locale.h中,定義了7個(gè)常量,一個(gè)結(jié)構(gòu),2個(gè)函數(shù)。
常量的定義:
LC_ALL
:傳遞給setlocale的第一個(gè)參數(shù),指定要更改該locale的哪個(gè)方面。LC_COLLATE
:strcoll和strxfrm的行為。LC_CTYPE
:字符處理函數(shù)。LC_MONETARY
:localeconv返回的貨幣信息。LC_NUMERIC
:localeconv返回的小數(shù)點(diǎn)和貨幣信息。LC_TIME
:strftime的行為。 以上擴(kuò)展成具有唯一取值的整型常數(shù)表達(dá)式,可作為setlocale的第一個(gè)參數(shù)。NULL
:由實(shí)現(xiàn)環(huán)境定義的空指針。
struct lconv結(jié)構(gòu)
該結(jié)構(gòu)用于存儲和表示當(dāng)前l(fā)ocale的設(shè)置。其結(jié)構(gòu)定義如下:
struct lconv
{char*decimal_point ;char*thousands_sep ;char*grouping ;char*int_curr_symbol ;char*currency_symbol ;char*mon_decimal_point ;char*mon_thousands_sep ;char*mon_grouping ;char*positive_sign ;char*negative_sign ;char int_frac_digits ;char frac_digits ;char p_cs_precedes ;char p_sep_by_space ;char n_cs_precedes ;char n_sep_by_space ;char p_sign_posn ;char n_sign_posn ;
};
函數(shù)
struct Iconv *localeconv(void);
函數(shù)localeconv將一個(gè)struct Iconv類型的對象的數(shù)據(jù)成員設(shè)置成為按照當(dāng)前地域環(huán)境的有關(guān)規(guī)則進(jìn)行數(shù)量格式化后的相應(yīng)值。char *setlocale(int category,char * locale);
函數(shù)setlocale用于更改和查詢程序的整個(gè)當(dāng)前地域環(huán)境或部分設(shè)置。地域環(huán)境變量由參數(shù)category(上面定義的6個(gè)常量)和locale指定。
1.6 數(shù)學(xué)函數(shù)math.h
在math.h中定義了一些數(shù)學(xué)函數(shù)和宏,用來實(shí)現(xiàn)不同種類的數(shù)學(xué)運(yùn)算。下面給出中標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)的函數(shù)定義及功能簡介,見下表。
函數(shù)定義 | 函數(shù)功能簡介 |
---|---|
double exp(double x); | 指數(shù)運(yùn)算函數(shù), 求e的x次冪函數(shù) |
double log(double x) | 對數(shù)函數(shù)ln(x) |
double log10(double x); | 對數(shù)函數(shù)log |
double pow(double x, double y); | 指數(shù)函數(shù)(x的y次方) |
double sqrt(double x); | 計(jì)算平方根函數(shù) |
double ceil(double x); | 向上舍入函數(shù) |
double floor(double x); | 向下舍入函數(shù) |
double fabs(double x); | 求浮點(diǎn)數(shù)的絕對值 |
double ldexp(double x, int n); | 裝載浮點(diǎn)數(shù)函數(shù) |
double frexp(double x, int* exp); | 分解浮點(diǎn)數(shù)函數(shù) |
double modf(double x, double* ip); | 分解雙精度數(shù)函數(shù) |
double fmod(double x, double y); | 求模函數(shù) |
double sin(double x); | 計(jì)算x的正弦值函數(shù) |
double cos(double x); | 計(jì)算x的余弦值函數(shù) |
double tan(double x); | 計(jì)算x的正切值函數(shù) |
double asin(double x); | 計(jì)算x的反正弦函數(shù) |
double acos(double x); | 計(jì)算x的反余弦函數(shù) |
double atan(double x); | 反正切函數(shù)1 |
double atan2(double y, double x); | 反正切函數(shù)2 |
double sinh(double x); | 計(jì)算x的雙曲正弦值 |
double cosh(double x); | 計(jì)算x的雙曲余弦值 |
double tanh(double x); | 計(jì)算x的雙曲正切值 |
1.7 非局部跳轉(zhuǎn)setjmp.h
在setjmp.h頭文件中定義了一種特別的函數(shù)調(diào)用和函數(shù)返回順序的方式。這種方式不同于以往的函數(shù)調(diào)用和返回順序,它允許程序流程立即從一個(gè)深層嵌套的函數(shù)中返回。
定義了兩個(gè)宏:int setjmp(jmp_buf env);
設(shè)置調(diào)轉(zhuǎn)點(diǎn)
和 longjmp(jmp_buf jmpb, int retval);
跳轉(zhuǎn)
宏setjmp的功能是將當(dāng)前程序的狀態(tài)保存在結(jié)構(gòu)env,為調(diào)用宏longjmp設(shè)置一個(gè)跳轉(zhuǎn)點(diǎn)。setjmp將當(dāng)前信息保存在env中供longjmp使用。其中env是jmp_buf結(jié)構(gòu)類型的,該結(jié)構(gòu)定義為:
typedef struct {unsigned j_sp;unsigned j_ss;unsigned j_flag;unsigned j_cs;unsigned j_ip;unsigned j_bp;unsigned j_di;unsigned j_es;unsigned j_si;unsigned j_ds;
} jmp_buf[1];
直接調(diào)用setjmp時(shí),返回值為0,這一般用于初始化(設(shè)置跳轉(zhuǎn)點(diǎn)時(shí))。以后再調(diào)用longjmp宏時(shí)用env變量進(jìn)行跳轉(zhuǎn)。程序會自動跳轉(zhuǎn)到setjmp宏的返回語句處,此時(shí)setjmp的返回值為非0,由longjmp的第二個(gè)參數(shù)指定。 下面通過例子來理解中定義的這兩個(gè)宏。 例程9-1 非局部跳轉(zhuǎn)演示。
include <setjmp.h>
jmp_buf env; /*定義jmp_buf類型變量*/
int main(void)
{ int value; value = setjmp(env); /*調(diào)用setjmp,為longjmp設(shè)置跳轉(zhuǎn)點(diǎn)*/if (value != 0) {printf("Longjmp with value %d\n", value);exit(value); /*退出程序*/} printf("Jump ... \n");longjmp(env,1); /*跳轉(zhuǎn)到setjmp語句處*/return 0;
}
本例先應(yīng)用setjmp宏為longjmp設(shè)置跳轉(zhuǎn)點(diǎn),當(dāng)?shù)谝淮握{(diào)用setjmp時(shí)返回值為0,并將程序的當(dāng)前狀態(tài)(寄存器的相關(guān)狀態(tài))保存在結(jié)構(gòu)變量env中。當(dāng)程序執(zhí)行到longjmp時(shí),系統(tǒng)會根據(jù)setjmp保存下來的狀態(tài)env跳轉(zhuǎn)到setjmp語句處,并根據(jù)longjmp的第二個(gè)參數(shù)設(shè)置此時(shí)setjmp的返回值。 本例的運(yùn)行結(jié)果為:
Jump …
Longjmp with value 1
一般地,宏setjmp和longjmp是成對使用的,這樣程序流程可以從一個(gè)深層嵌套的函數(shù)中返回。
1.8 可變參數(shù)表stdarg.h
可變參數(shù)表中的宏是用來定義參數(shù)可變的函數(shù)的。在C語言中,有些庫函數(shù)或者用戶自定義的函數(shù)的參數(shù)是可變的,常用省略號“……”(例如庫函數(shù)中的printf),定義這樣的函數(shù)就要使用到中的宏。
va_list:用于保存宏va_start,va_arg以及va_end所需信息的數(shù)據(jù)類型。
stdarg.h中還定義了三個(gè)宏:
- void va_start(va_list ap, parmN);
- type va_arg(va_list ap,type);
- void va_end (va_list ap);
va_start的作用是初始化ap,因此va_start要在所有其它的va開頭的宏前面最先使用(除了用va_list定義變量外),后面的va_copy, va_arg, va_end都要使用到ap。在一對va_start和va_end之間不能再次使用va_start宏。其中,parmN為"…"之前的最后一個(gè)參數(shù)。
例如,printf函數(shù)定義為:printf(const char format, …); 那么在printf函數(shù)中的va_start使用之后, parmN 的值就等于format。
va_arg的作用就是返回參數(shù)列表ap中的下一個(gè)具有type類型的參數(shù),每次調(diào)用va_arg都會修改ap的值,這樣才能連續(xù)不斷地獲取下一個(gè)type類型的參數(shù)。 va_end與va_start構(gòu)成了一個(gè)scope,va_end標(biāo)志著結(jié)束,va_end之后ap就無效了。
1.9 公共定義stddef.h
在stddef.h頭文件中,指定了標(biāo)準(zhǔn)庫中的公共定義。其中主要包括以下內(nèi)容:
NULL
:空指針類型常量。offset(type,member-designator)
:它是擴(kuò)展iz-t類型的一個(gè)整型常數(shù)表達(dá)式。它的值為從type定義的結(jié)構(gòu)類型的開頭到結(jié)構(gòu)成員member-designator的偏移字節(jié)數(shù)。ptrdiff_t
:表示兩指針之差的帶符號整數(shù)類型。size_t
:表示由sizeof運(yùn)算符計(jì)算出的結(jié)果類型,它是一個(gè)無符號整數(shù)類型。wchar_t
:它是一種整數(shù)類型,取值范圍為在被支持的地域環(huán)境中最大擴(kuò)展字符集的所有字符的各種代碼,空字符代碼值為0。
1.10 輸入輸出stdio.h
在stdio.h頭文件中定義了輸入輸出函數(shù),類型和宏。這些函數(shù)、類型和宏幾乎占到標(biāo)準(zhǔn)庫的三分之一。 下面給出頭文件中聲明的函數(shù)以及功能簡介,見下表。
函數(shù)定義 | 函數(shù)功能簡介 |
---|---|
FILE *fopen(char *filename, char *type) | 打開一個(gè)文件 |
FILE *fropen(char *filename, char *type,FILE *fp) | 打開一個(gè)文件,并將該文件關(guān)聯(lián)到fp指定的流 |
int fflush(FILE *stream) | 清除一個(gè)流 |
int fclose(FILE *stream) | 關(guān)閉一個(gè)文件 |
int remove(char *filename) | 刪除一個(gè)文件 |
int rename(char *oldname, char *newname) | 重命名文件 |
FILE *tmpfile(void) | 以二進(jìn)制方式打開暫存文件 |
char *tmpnam(char *sptr) | 創(chuàng)建一個(gè)唯一的文件名 |
int setvbuf(FILE *stream, char *buf, int type, unsigned size) | 把緩沖區(qū)與流相關(guān) |
int printf(char *format…) | 產(chǎn)生格式化輸出的函數(shù) |
int fprintf(FILE *stream, char *format[, argument,…]) | 傳送格式化輸出到一個(gè)流中 |
int scanf(char *format[,argument,…]) | 執(zhí)行格式化輸入 |
int fscanf(FILE *stream, char *format[,argument…]) | 從一個(gè)流中執(zhí)行格式化輸入 |
int fgetc(FILE *stream) | 從流中讀取字符 |
char *fgets(char *string, int n, FILE *stream) | 從流中讀取一字符串 |
int fputc(int ch, FILE *stream) | 送一個(gè)字符到一個(gè)流中 |
int fputs(char *string, FILE *stream) | 送一個(gè)字符到一個(gè)流中 |
int getc(FILE *stream) | 從流中取字符 |
int getchar(void) | 從stdin流中讀字符 |
char *gets(char *string) | 從流中取一字符串 |
int putchar(int ch) | 在stdout上輸出字符 |
int puts(char *string) | 送一字符串到流中 |
int ungetc(char c, FILE *stream) | 把一個(gè)字符退回到輸入流中 |
int fread(void *ptr, int size, int nitems, FILE *stream) | 從一個(gè)流中讀數(shù)據(jù) |
int fwrite(void *ptr, int size, int nitems, FILE *stream) | 寫內(nèi)容到流中 |
int fseek(FILE *stream, long offset, int fromwhere) | 重定位流上的文件指針 |
long ftell(FILE *stream) | 返回當(dāng)前文件指針 |
int rewind(FILE *stream) | 將文件指針重新指向一個(gè)流的開頭 |
int fgetpos(FILE *stream) | 取得當(dāng)前文件的句柄 |
int fsetpos(FILE *stream, const fpos_t *pos) | 定位流上的文件指針 |
void clearerr(FILE *stream) | 復(fù)位錯(cuò)誤標(biāo)志 |
int feof(FILE *stream) | 檢測流上的文件結(jié)束符 |
int ferror(FILE *stream) | 檢測流上的錯(cuò)誤 |
void perror(char *string) | 系統(tǒng)錯(cuò)誤信息 |
點(diǎn)擊了解 C語言之IO流函數(shù)
1.11 實(shí)用函數(shù)stdlib.h
在stdlib.h頭文件中聲明了一些實(shí)現(xiàn)數(shù)值轉(zhuǎn)換,內(nèi)存分配等類似功能的函數(shù)。下面給出頭文件中聲明的函數(shù)以及功能簡介,見下表。
函數(shù)定義 | 函數(shù)功能簡介 |
---|---|
double atof(const char *s) | 將字符串s轉(zhuǎn)換為double類型 |
int atoi(const char *s) | 將字符串s轉(zhuǎn)換為int類型 |
long atol(const char *s) | 將字符串s轉(zhuǎn)換為long類型 |
double strtod (const char*s,char **endp) | 將字符串s前綴轉(zhuǎn)換為double型 |
long strtol(const char*s,char **endp,int base) | 將字符串s前綴轉(zhuǎn)換為long型 |
unsinged long strtol(const char*s,char **endp,int base) | 將字符串s前綴轉(zhuǎn)換為unsinged long型 |
int rand(void) | 產(chǎn)生一個(gè)0~RAND_MAX之間的偽隨機(jī)數(shù) |
void srand(unsigned int seed) | 初始化隨機(jī)數(shù)發(fā)生器 |
void *calloc(size_t nelem, size_t elsize) | 分配主存儲器 |
void *malloc(unsigned size) | 內(nèi)存分配函數(shù) |
void *realloc(void *ptr, unsigned newsize) | 重新分配主存 |
void free(void *ptr) | 釋放已分配的塊 |
void abort(void) | 異常終止一個(gè)進(jìn)程 |
void exit(int status) | 終止應(yīng)用程序 |
int atexit(atexit_t func) | 注冊終止函數(shù) |
char *getenv(char *envvar) | 從環(huán)境中取字符串 |
void *bsearch(const void *key, const void *base, size_t *nelem, size_t width, int(*fcmp)(const void *, const *)) | 二分法搜索函數(shù) |
void qsort(void *base, int nelem, int width, int (*fcmp)()) | 使用快速排序例程進(jìn)行排序 |
int abs(int i) | 求整數(shù)的絕對值 |
long labs(long n) | 取長整型絕對值 |
div_t div(int number, int denom) | 將兩個(gè)整數(shù)相除, 返回商和余數(shù) |
ldiv_t ldiv(long lnumer, long ldenom) | 兩個(gè)長整型數(shù)相除, 返回商和余數(shù) |
1.12 日期與時(shí)間函數(shù)time.h
在time.h頭文件中,聲明了一些處理日期和時(shí)間的類型與函數(shù)。clock_t
和time_t
是兩個(gè)表示時(shí)間值的算術(shù)類型。結(jié)構(gòu)struct tm
存儲了一個(gè)日歷時(shí)間的各個(gè)成分。結(jié)構(gòu)tm的成員的意義及其正常的取值范圍如下:
struct tm {int tm_sec; /*從當(dāng)前分鐘開始經(jīng)過的秒數(shù)(0,61)*/int tm_min; /*從當(dāng)前小時(shí)開始經(jīng)過的分鐘數(shù)(0,59)*/int tm_hour; /*從午夜開始經(jīng)過的小時(shí)數(shù)(0,23)*/int tm_mday; /*當(dāng)月的天數(shù)(1,31)*/int tm_mon; /*從1月起經(jīng)過的月數(shù)(0,11)*/int tm_year; /*從1900年起經(jīng)過的年數(shù)*/int tm_wday; /*從本周星期天開始經(jīng)過的天數(shù)(0,6)*/int tm_yday; /*從今年1月1日起經(jīng)過的天數(shù)(0,356)*/int tm_isdst; /*夏令時(shí)標(biāo)記*/
};
如果夏令時(shí)有效,夏令時(shí)標(biāo)記tm_isdst值為正;若夏令時(shí)無效,tm_isdst值為0;如果得不到夏令時(shí)信息,tm_isdst值為負(fù)。 下面給出頭文件中聲明的時(shí)間函數(shù),見下表。
函數(shù)定義 | 函數(shù)功能簡介 |
---|---|
clock_t clock(void) | 確定處理器時(shí)間函數(shù) |
time_t time(time_t *tp) | 返回當(dāng)前日歷時(shí)間 |
double difftime(time_t time2, time_t time1) | 計(jì)算兩個(gè)時(shí)刻之間的時(shí)間差 |
time_t mktime(struct tm *tp) | 將分段時(shí)間值轉(zhuǎn)換為日歷時(shí)間值 |
char *asctime(const struct tm *tblock) | 轉(zhuǎn)換日期和時(shí)間為ASCII碼 |
char *ctime(const time_t *time) | 把日期和時(shí)間轉(zhuǎn)換為字符串 |
struct tm *gmtime(const time_t *timer) | 把日期和時(shí)間轉(zhuǎn)換為格林尼治標(biāo)準(zhǔn)時(shí)間(GMT) |
struct tm *localtime(const time_t *timer) | 把日期和時(shí)間轉(zhuǎn)變?yōu)榻Y(jié)構(gòu) |
size_t strftime(char *s,size_t smax,const char *fmt, const struct tm *tp) | 根據(jù)fmt的格式要求將*tp中的日期與時(shí)間轉(zhuǎn)換為指定格式。 |
1.13 信號signal.h
頭signal.h文件中提供了一些處理程序運(yùn)行期間引發(fā)的各種異常條件的功能,例如一些來自外部的中斷信號等。 在中只定義了兩個(gè)函數(shù):int signal(int sig, sigfun fname);
和int raise(int sig);
signal
函數(shù)的作用是設(shè)置某一信號的對應(yīng)動作。其中參數(shù)sig用來指定哪一個(gè)信號被設(shè)置處理函數(shù)。
在標(biāo)準(zhǔn)C 中支持的信號如下表。 標(biāo)準(zhǔn)C支持的信號
取值 | 說明 | 默認(rèn)執(zhí)行動作 | 使用的操作系統(tǒng) |
---|---|---|---|
SIGABRT | 異常中止 | 中止程序 | UNIX DOS |
SIGPPE | 算術(shù)運(yùn)算錯(cuò)誤 | 中止程序 | UNIX DOS |
SIGILL | 非法硬件指令 | 中止程序 | UNIX DOS |
SIGINT | 終端中斷 | 中止程序 | UNIX DOS |
SIGSEGV | 無效的內(nèi)存訪問 | 中止程序 | UNIX DOS |
SIGTERM | 中止信號 | 中止程序 | UNIX DOS |
參數(shù)fname是一個(gè)指向函數(shù)的指針,當(dāng)sig的信號發(fā)生時(shí)程序會自動中斷轉(zhuǎn)而執(zhí)行fname指向的函數(shù)。執(zhí)行完畢再返回?cái)帱c(diǎn)繼續(xù)執(zhí)行程序。系統(tǒng)提供了兩個(gè)常量函數(shù)指針,可以作為函數(shù)的參數(shù)傳遞。它們分別是:
SIG_DEF
:執(zhí)行默認(rèn)的系統(tǒng)第一的函數(shù)。SIG_IGN
:忽略此信號。
raise函數(shù)的作用是向正在執(zhí)行的程序發(fā)送一個(gè)信號,從而使得當(dāng)前進(jìn)程產(chǎn)生一個(gè)中斷而轉(zhuǎn)向信號處理函數(shù)signal執(zhí)行。其中參數(shù)sig為信號名稱,它的取值范圍同函數(shù)signal中的參數(shù)sig取值范圍相同 ,下面通過例子理解函數(shù)signal和raise。
#include <stdio.h>
#include <signal.h>
void Print1();
void Print2();
int main()
{ signal(SIGINT,Print1);printf("Please enter Ctr+c for interupt\n") ;getchar();signal(SIGSEGV,Print2);printf("Please enter any key for a interupt\n");getchar();raise(SIGSEGV);}
void Print1()
{printf("This is a SIGINT interupt!\n");
}
void Print2()
{printf("This is a SIGSEGV interupt!\n");
}
本例首先通過用戶終端輸入Ctrl+c產(chǎn)生一個(gè)終端中斷,然后應(yīng)用signal函數(shù)調(diào)用中斷處理函數(shù)Print1;再通過raise函數(shù)生成一個(gè)無效內(nèi)存訪問中斷,并通過signal函數(shù)調(diào)用中斷處理函數(shù)Print2。
運(yùn)行結(jié)果為:
Please enter Ctr+c for interupt
^C
This is a SIGINT interupt!
Please enter any key for a interupt
a
This is a SIGSEGV interupt!