zoukankan      html  css  js  c++  java
  • 14、【C语言基础】__exit() exit() return的区别

    __exit()  exit() return的区别

    _exit()  --- 直接结束进程进入到内核中
    exit()    --- 清理I/O缓冲区后再退出进程
    return   --- 函数返回

    【实例】

    __exit():

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <unistd.h>
     4 
     5 int main()
     6 {
     7     int ret = 0;
     8     printf("I'm ok!
    ");
     9     printf("Good good study!");
    10 
    11     _exit(0);
    12 }

    执行结果:

    I'm ok!
    

     【实例】

    exit()

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <unistd.h>
     4 
     5 int main()
     6 {
     7     int ret = 0;
     8     printf("I'm ok!
    ");
     9     printf("Good good study!");
    10 
    11     exit(0);
    12 }

    执行结果:

    I'm ok!
    Good good study!
    

    当把第二个输出信息后面加一个" ";两个程序的结果都会输出相同的结果,两个打印信息都会打印出来。

    原因如下:

    printf函数就是使用的是缓冲I/O的方式,该函数在遇到“ “换行符时自动的从缓冲区中将记录读出。所以exit()将缓冲区的数据写完后才能退出来,所以调用exit()函数后程序并不会马上退出,这就是有些出现的僵尸程序,而_exit是直接退出进入到内核中去。

    总的来说_exit()执行后会立即返回给内核,而exit()会先执行一些清除操作然后将控制权交给内核,就是说在调用_exit函数的时候它会关闭所有的文件描述符,清理内存和其他的一些内核清理函数,但是不会刷新(stdin,stdout,stderr...),而exit就是在调用_exit()函数的前面先刷新流。

     注:
    1、return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束
    2、return是返回函数调用,如果返回的是main函数,则为退出程序
    3、exit是在调用处强行退出程序,运行一次程序就结束

  • 相关阅读:
    Anagram
    HDU 1205 吃糖果(鸽巢原理)
    Codeforces 1243D 0-1 MST(补图的连通图数量)
    Codeforces 1243C Tile Painting(素数)
    Codeforces 1243B2 Character Swap (Hard Version)
    Codeforces 1243B1 Character Swap (Easy Version)
    Codeforces 1243A Maximum Square
    Codeforces 1272E Nearest Opposite Parity(BFS)
    Codeforces 1272D Remove One Element
    Codeforces 1272C Yet Another Broken Keyboard
  • 原文地址:https://www.cnblogs.com/Long-w/p/9673765.html
Copyright © 2011-2022 走看看