久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久


exit()和_exit()函數

分享到:
           

    1)exit()和_exit()函數說明

    exit()和_exit()函(han)數都(dou)是用(yong)(yong)來終止(zhi)進(jin)程的(de)。當(dang)程序執行(xing)到exit()或_exit()時,進(jin)程會無條件(jian)地停止(zhi)剩下的(de)所(suo)(suo)有操作,清(qing)除各種數據結構(gou),并(bing)終止(zhi)本進(jin)程的(de)運(yun)行(xing)。但是,這兩(liang)個函(han)數還是有區別的(de),其調用(yong)(yong)過程如圖1所(suo)(suo)示。


圖(tu)1 exit()和_exit()函數(shu)流程圖(tu)

    從圖(tu)1中可以看出(chu),_exit()函(han)(han)數(shu)的(de)(de)作用(yong)是:直(zhi)接使進程停(ting)止運行,清(qing)除其(qi)使用(yong)的(de)(de)內(nei)存空間,并清(qing)除其(qi)在(zai)(zai)內(nei)核中的(de)(de)各種數(shu)據結構;exit()函(han)(han)數(shu)則在(zai)(zai)這些(xie)基礎(chu)上做了(le)一些(xie)包(bao)裝,在(zai)(zai)執行退出(chu)之前加了(le)若干道工序。exit()函(han)(han)數(shu)與_exit()函(han)(han)數(shu)大(da)的(de)(de)區別(bie)就(jiu)在(zai)(zai)于exit()函(han)(han)數(shu)在(zai)(zai)終(zhong)止當前進程之前要(yao)檢查(cha)該進程打開過(guo)哪些(xie)文(wen)件,把文(wen)件緩沖區中的(de)(de)內(nei)容寫回文(wen)件,也就(jiu)是圖(tu)3.5中的(de)(de)“清(qing)理(li)I/O緩沖”一項。

    由于在Linux的標準函(han)數庫中,有一種被稱做“緩沖(chong)I/O(buffered I/O)”的操作,其特(te)征(zheng)就是對應每(mei)一個(ge)打開的文(wen)件,在內存中都有一片緩沖(chong)區(qu)。

    每次(ci)(ci)讀(du)文(wen)件(jian)時,會連續讀(du)出若干(gan)條記錄,這樣在下次(ci)(ci)讀(du)文(wen)件(jian)時就可(ke)以(yi)直(zhi)接從內(nei)存的(de)緩(huan)沖(chong)(chong)區中讀(du)取;同樣,每次(ci)(ci)寫文(wen)件(jian)時,也僅僅是寫入(ru)內(nei)存中的(de)緩(huan)沖(chong)(chong)區,等滿足了一定的(de)條件(jian)(如(ru)達到(dao)(dao)一定數量或遇到(dao)(dao)特定字符(fu)等),再將緩(huan)沖(chong)(chong)區中的(de)內(nei)容一次(ci)(ci)性寫入(ru)文(wen)件(jian)。

 ;   這種技術大(da)(da)大(da)(da)增加(jia)了(le)文(wen)(wen)件讀寫的速度,但也為編(bian)程(cheng)帶來(lai)了(le)一些(xie)麻(ma)煩。比如(ru)有些(xie)數(shu)據(ju)認為已經被寫入到文(wen)(wen)件中,實際上因為沒有滿足特定的條件,它們還只(zhi)是被保存在(zai)緩沖區(qu)內,這時用(yong)_exit()函(han)數(shu)直接(jie)將(jiang)進程(cheng)關閉掉,緩沖區(qu)中的數(shu)據(ju)就會丟失。因此(ci),若想保證數(shu)據(ju)的完整性(xing),好使用(yong)exit()函(han)數(shu)。

    2)exit()和_exit()函數語法

    表1列(lie)出了exit()和_exit()函數的語(yu)法(fa)要點。

表1 exit()和_exit()函數語法要點

所需頭文件 exit:#include <stdlib.h>
_exit:#include <unistd.h>
函數原型 exit:void exit(int status)
_exit:void _exit(int status)
函數傳入值 status是一個整型的參數,可以利用這個參數傳遞進程結束時的狀態。一般來說,0表示正常結束;其他的數值表示出現了錯誤,進程非正常結束。
在實際編程時,可以用wait()系統調用接收子進程的返回值,針對不同的情況進行不同的處理

    3)exit()和_exit()使用實例

    以(yi)下兩個(ge)示(shi)(shi)例比較了exit()和_exit()函數(shu)(shu)的(de)區(qu)別(bie)。由于printf()函數(shu)(shu)使(shi)用(yong)的(de)是緩沖I/O方式,該函數(shu)(shu)在遇到“\n”換行(xing)符時自動(dong)從(cong)緩沖區(qu)中將記錄(lu)讀出。以(yi)下示(shi)(shi)例中就是利用(yong)這個(ge)性質來進行(xing)比較的(de)。示(shi)(shi)例1的(de)代(dai)碼如下:

    /* exit.c */
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
        printf("Using exit...\n");
        printf("This is the content in buffer");
        exit(0);
    }
    $ ./exit
    Using exit...
    This is the content in buffer $ 

&nbsp;   讀者從輸出的結果(guo)中可以看到(dao),調用exit()函數時,緩沖區中的記錄也能(neng)正常輸出。

    示(shi)例2的(de)代碼如下:

    /* _exit.c */
    #include <stdio.h>
    #include <unistd.h>

    int main()
    {
        printf("Using _exit...\n");
        printf("This is the content in buffer"); /* 加上回車符之后結果又如何 */
        _exit(0);
    }
    $ ./_exit
    Using _exit...
    $

    讀(du)者從后的結果(guo)中可(ke)以(yi)看到,調用(yong)_exit()函數無法輸出(chu)緩沖區中的記錄(lu)。

    本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》

   熱點鏈接(jie):

   1、Linux下多進程編程之exec函數語法及使用實例
   2、Linux下多進程編程之fork()函數語法
   3、Linux下多進程編程之fork()函數說明
   4、Linux下多任務系統之線程介紹
   5、Linux下進程的內存結構

更多新聞>>