国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩


exit()和_exit()函數(shù)

分享到:
           

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

    exit()和_exit()函數(shù)都是用來終止進(jìn)程的。當(dāng)程序執(zhí)行到exit()或_exit()時,進(jìn)程會無條件地停止剩下的所有操作,清除各種數(shù)據(jù)結(jié)構(gòu),并終止本進(jìn)程的運行。但是,這兩個函數(shù)還是有區(qū)別的,其調(diào)用過程如圖1所示。


圖1 exit()和_exit()函數(shù)流程圖

    從圖1中可以看出,_exit()函數(shù)的作用是:直接使進(jìn)程停止運行,清除其使用的內(nèi)存空間,并清除其在內(nèi)核中的各種數(shù)據(jù)結(jié)構(gòu);exit()函數(shù)則在這些基礎(chǔ)上做了一些包裝,在執(zhí)行退出之前加了若干道工序。exit()函數(shù)與_exit()函數(shù)大的區(qū)別就在于exit()函數(shù)在終止當(dāng)前進(jìn)程之前要檢查該進(jìn)程打開過哪些文件,把文件緩沖區(qū)中的內(nèi)容寫回文件,也就是圖3.5中的“清理I/O緩沖”一項。

    由于在Linux的標(biāo)準(zhǔn)函數(shù)庫中,有一種被稱做“緩沖I/O(buffered I/O)”的操作,其特征就是對應(yīng)每一個打開的文件,在內(nèi)存中都有一片緩沖區(qū)。

    每次讀文件時,會連續(xù)讀出若干條記錄,這樣在下次讀文件時就可以直接從內(nèi)存的緩沖區(qū)中讀。煌瑯,每次寫文件時,也僅僅是寫入內(nèi)存中的緩沖區(qū),等滿足了一定的條件(如達(dá)到一定數(shù)量或遇到特定字符等),再將緩沖區(qū)中的內(nèi)容一次性寫入文件。

    這種技術(shù)大大增加了文件讀寫的速度,但也為編程帶來了一些麻煩。比如有些數(shù)據(jù)認(rèn)為已經(jīng)被寫入到文件中,實際上因為沒有滿足特定的條件,它們還只是被保存在緩沖區(qū)內(nèi),這時用_exit()函數(shù)直接將進(jìn)程關(guān)閉掉,緩沖區(qū)中的數(shù)據(jù)就會丟失。因此,若想保證數(shù)據(jù)的完整性,好使用exit()函數(shù)。

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

    表1列出了exit()和_exit()函數(shù)的語法要點。

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

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

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

    以下兩個示例比較了exit()和_exit()函數(shù)的區(qū)別。由于printf()函數(shù)使用的是緩沖I/O方式,該函數(shù)在遇到“\n”換行符時自動從緩沖區(qū)中將記錄讀出。以下示例中就是利用這個性質(zhì)來進(jìn)行比較的。示例1的代碼如下:

    /* 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 $

    讀者從輸出的結(jié)果中可以看到,調(diào)用exit()函數(shù)時,緩沖區(qū)中的記錄也能正常輸出。

    示例2的代碼如下:

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

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

    讀者從后的結(jié)果中可以看到,調(diào)用_exit()函數(shù)無法輸出緩沖區(qū)中的記錄。

    本文選自華清遠(yuǎn)見嵌入式培訓(xùn)教材《從實踐中學(xué)嵌入式Linux應(yīng)用程序開發(fā)》

   熱點鏈接:

   1、Linux下多進(jìn)程編程之exec函數(shù)語法及使用實例
   2、Linux下多進(jìn)程編程之fork()函數(shù)語法
   3、Linux下多進(jìn)程編程之fork()函數(shù)說明
   4、Linux下多任務(wù)系統(tǒng)之線程介紹
   5、Linux下進(jìn)程的內(nèi)存結(jié)構(gòu)

更多新聞>>