exit()与_exit()问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
llxlf2012
帖子: 25
注册时间: 2011-04-21 10:06

exit()与_exit()问题

#1

帖子 llxlf2012 » 2011-06-03 15:13

http://hi.baidu.com/icoky/blog/item/85b ... f31cf.html 在上述链接里(大部分网上对exit()和_exit())都列举了下面两段程序
(1)#include<stdlib.h>
main()
{
printf ("output begin");
printf ("content in buffer");
exit(0);
}
$gcc exit2.c -o exit2
$./exit2
output begin
content in buffer
(2)#include<unistd.h>
main()
{
printf("output begin");
printf("content in buffer");
_exit(0);
}
$gcc _exit1.c -o _exit1
$./_exit1
output begin
但是我在我的ubuntu上试了下,程序1没有什么大问题,但程序2如果就是按照上述去编译运行后是不会出现printf的结果,但在printf后加上\n就会有不同的结果出现,不知道是什么原因,还请指教
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: exit()与_exit()问题

#2

帖子 BigSnake.NET » 2011-06-03 15:23

exit 是 C 库函数
_exit 是系统调用

所以 _exit 不会刷掉流缓冲区的东西。。
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
llxlf2012
帖子: 25
注册时间: 2011-04-21 10:06

Re: exit()与_exit()问题

#3

帖子 llxlf2012 » 2011-06-03 15:58

BigSnake.NET 写了:exit 是 C 库函数
_exit 是系统调用

所以 _exit 不会刷掉流缓冲区的东西。。
你好,我明白你的意思,但我运行程序2后是没有结果的,在printf后面加上\n后才会出现结果,我想问这和介绍的有出入是什么原因造成的?
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: exit()与_exit()问题

#4

帖子 lilydjwg » 2011-06-04 17:31

llxlf2012 写了: 你好,我明白你的意思,但我运行程序2后是没有结果的,在printf后面加上\n后才会出现结果,我想问这和介绍的有出入是什么原因造成的?
你的终端是行缓冲的——只缓冲一行。如果有换行符或者缓冲区满则立马输出。
建议看看 UNIX环境高级编程。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: exit()与_exit()问题

#5

帖子 fanhe » 2011-06-06 19:45

看啥书都是浮云啊, 如果你连man都不看

代码: 全选

man exit
man _exit
好像要装个软件包的
回复