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就能显示了。为什么呢?这个就是编译器自己加的了。

你可能感兴趣的:(linux)