淺談linux下的一些常用函數的總結(必看篇)_Linux

來源:互聯網
上載者:User

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裡面有定義

#define    EXIT_SUCCESS    0 #define    EXIT_FAILURE    1 

C程式的終止分為兩種: 正常終止和異常終止.

正常終止分為: return, exit, _exit, _Exit, pthreade_exit

異常中指分為: abort, SIGNAL, 線程響應取消

主要說一下正常終止的前4種, 即exit系列函數.

#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不調用而直接由核心接管進行清理.

#include<stdlib.h>int atexit(void (*function)(void))

傳回值:成功返回0,失敗返回非零數.

ISO C規定, 一個進程最對可登記32個終止處理函數, 這些函數由exit按登記相反的順序自動調用. 如果同一函數登記多次, 也會被調用多次.

#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;}
addia@addia-Lenovo-B470:~$ ./testmain is donenfirst exit handlernfirst exit handlernsecond exit handlern

以上就是小編為大家帶來的淺談linux下的一些常用函數的總結(必看篇)全部內容了,希望大家多多支援雲棲社區~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.