【Linux】_exit()、exit(0)、exit(1)与return区别详解

功能: 

  • _exit() :退出程序。
  • exit(0):运行正常退出程序;
  • exit(1):运行异常退出程序;
  • return():返回函数,若在主函数中,则会退出函数并返回值。

 

_exit() 和 exit() 区别:

  • exit()会将缓冲区的数据写完再结束进程到内核中去(退出进程会清理I/O缓冲区)。
  • _exit() 直接结束进程进入到内核中。
  • exit() 函数定义在 stdlib.h 中,_exit() 定义在 unistd.h 中。
  • 图示:

示例:

_exit()

#include <stdio.h>
#include <unistd.h>

int main(void) { 
	printf("hello\n");
	printf("OK");	
	_exit(0);
}

输出结果:

hello

exit()

#include <stdio.h>
#include <stdlib.h>

int main(void) { 
	printf("hello\n");
	printf("OK");	
	exit(0);
}

输出结果:

hello
OK

原因:

printf函数使用的是缓冲I/O的方式,该函数在遇到“\n“换行符时自动的从缓冲区中将记录读出。

exit() 将缓冲区的数据写完后才能退出来,所以调用exit()函数后程序并不会马上退出,会把OK也输出出来。

_exit() 是直接退出进入到内核中了。

 

exit(0) 和 exit(1) 区别:

  • exit(0):运行正常退出程序;
  • exit(1):运行异常退出程序,返回值1是返回给操作系统的;

 

return 和 exit() 区别:

  • return 是关键字;exit() 是函数。
  • return 是语言级别的,表示调用堆栈的返回;而 exit() 是系统调用级别的,表示进程的结束。
  • return 是退出(返回)函数,将控制权移交给递归的前一级;exit() 是直接退出进程。
  • 在最初调用的main函数中调用return和exit的现象很模糊,非主函数中调用return和exit效果很明显。

 

 

参考:

https://blog.csdn.net/yyfwd/article/details/50548359

https://www.cnblogs.com/ECJTUACM-873284962/p/6882448.html#autoid-0-0-0

https://baike.so.com/doc/6759674-6974306.html

https://blog.csdn.net/qq_23929673/article/details/99670478

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值