linux c 下exit(0);與_exit(0);的區別


#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
pid_t pid;
if((pid=fork())==-1)
    {
    printf("error");
    }
else if(pid==0)
{
printf("ok\n");
exit(0);
}
else
{
printf("parent process,output begin\n");
printf("hello word");
_exit(0);
}
}

調試后你會發現沒有

hello word

exit是退出去先把內存中的數據輸出到文件中,而_exit 這個直接退出,消除內存中的數據;

printf是標准行輸出,遇到“\n”或者是寫入的內存滿了才會標准輸出;

我們可以嘗試在hello word 中加入很多i,假設輸入2000個吧(關於行輸出自行google),再次調試發現,會有 hello 等字符,這就是溢出了。

回到前面,為什么開始沒有hello,雖然hello word 在_exit前,但是你查看匯編會發現,他只是講數據存在內存中。沒有講數據真正輸出。當我們把_exit去掉 hello word就能顯示了。為什么呢?這個就是編譯器自己加的了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM