zoukankan      html  css  js  c++  java
  • 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就能显示了。为什么呢?这个就是编译器自己加的了。

  • 相关阅读:
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结和实验报告
    第六周作业
    第五周课程总结和实验报告
    第四周课程总结和实验报告
    课程总结
    第十四周
    第十三周学习总结
    第十二周总结
  • 原文地址:https://www.cnblogs.com/notepi/p/2874140.html
Copyright © 2011-2022 走看看