1.exit()函數
exit(int n) 其實就是直接退出程序,
因為默認的標準程序入口為int main(int argc, char** argv),返回值是int型的。
一般在shell下面,運行一個程序,然后使用命令echo $?就能得到該程序的返回值,也就是退出值,在main()里面,你可以用return n,也能夠直接用exit(n)來做。unix默認的習慣正確退出是返回0,錯誤返回非0。
重點:單獨的進程是返回給操作系統的。如果是多進程,是返回給父進程的。
在父進程里面調用waitpid()等函數得到子進程退出的狀態,以便作不同處理
返回值不能超過255.
在stdlib.h里面有定義
1
2
|
#define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 |
C程序的終止分為兩種: 正常終止和異常終止.
正常終止分為: return, exit, _exit, _Exit, pthreade_exit
異常中指分為: abort, SIGNAL, 線程響應取消
主要說一下正常終止的前4種, 即exit系列函數.
1
2
3
4
5
|
#include <stdlib.h> void exit( int status); void _Exit( int status); #include <unistd.h> void _exit( int status); |
以上3個函數的區別是:
exit()(或return 0)會調用終止處理程序和用戶空間的標準I/O清理程序(如fclose), _exit和_Exit不調用而直接由內核接管進行清理.
1
2
|
#include<stdlib.h> int atexit( void (*function)( void )) |
返回值:成功返回0,失敗返回非零數.
ISO C規定, 一個進程最對可登記32個終止處理函數, 這些函數由exit按登記相反的順序自動調用. 如果同一函數登記多次, 也會被調用多次.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include<stdlib.h> #include<unistd.h> static void my_exit1() { printf( "first exit handlern\n" ); } static void my_exit2() { printf( "second exit handlern\n" ); } int main() { if (atexit(my_exit2) != 0) printf( "can't register my_exit2n\n" ); if (atexit(my_exit1) != 0) printf( "can't register my_exit1n\n" ); if (atexit(my_exit1) != 0) printf( "can't register my_exit1n\n" ); printf( "main is donen\n" ); return 0; } |
1
2
3
4
5
|
addia@addia-Lenovo-B470:~$ ./test main is donen first exit handlern first exit handlern second exit handlern |
以上就是小編為大家帶來的淺談linux下的一些常用函數的總結(必看篇)全部內容了,希望大家多多支持服務器之家~