Chinaunix首页 | 论坛 | 博客
  • 博客访问: 329832
  • 博文数量: 54
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 606
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-03 22:43
文章分类
文章存档

2011年(3)

2010年(26)

2009年(2)

2008年(23)

我的朋友

分类: C/C++

2008-11-24 15:46:10

1:
Exit()和_exit()用于正常终止一个程序,_exit()立即进入内核,而exit()先执行一些清除处理,所有文件关闭,缓冲输出内容将刷新定义,并调用所有已刷新的“出口函数”(由atexit定义)。‘exit()’与‘_exit()’有不少区别在使用‘fork()’,特别是‘vfork()’时变得很 突出。‘exit()’与‘_exit()’的基本区别在于前一个调用实施与调用库里用户状态结构 (user-mode constructs)有关的清除工作(clean-up),而且调用用户自定义的清除程序
(
译者注:自定义清除程序由atexit函数定义,可定义多次,并以倒序执行),相对 应,后一个函数只为进程实施内核清除工作。 在由‘fork()’创建的子进程分支里,正常情况下使用‘exit()’是不正确的,这是 因为使用它会导致标准输入输出(译者注:stdio: Standard Input Output)的缓冲区被 清空两次,而且临时文件被出乎意料的删除(译者注临时文件由tmpfile函数创建 在系统临时目录下,文件名由系统随机生成)。在C++程序中情况会更糟,因为静 态目标(static objects)的析构函数(destructors)可以被错误地执行。(还有一些特殊情 况,比如守护程序,它们的*父进程*需要调用‘_exit()’而不是子进程;适用于绝 大多数情况的基本规则是,‘exit()’在每一次进入‘main’函数后只调用一次。
)
在由‘vfork()’创建的子进程分支里,‘exit()’的使用将更加危险,因为它将影响
父进程的状态。
2:
Exit(0): 正常退出,是退出程序,同时返回0给操作系统的shell

Exit(1):异常错误使得退出

exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXIT_SUCCESS);可读性比较好一点。

3:

Exit()和return的区别

一个最大的区别就是exit释放了所有的资源,如果你malloc/new了动态内存,忘记free,exit会帮你,而return不会.

 

阅读(1164) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~