exit()和_exit()的不同输出?

时间:2014-08-09 20:15:06

标签: c unix exit

为什么它显示不同的输出???任何人都可以深入解释我。

1

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

int main (void)
{
printf ("Using exit ... \ n");
printf ("This is the content in buffer");
exit (0);
}

输出:

使用退出... 这是缓冲区中的内容

2

# Include <unistd.h>
# Include <stdio.h>

int main (void)
{
printf ("Using exit ... \ n");
printf ("This is the content in buffer");
_exit (0);
}

仅输出:

使用退出...

2 个答案:

答案 0 :(得分:2)

如果我们阅读了_exit()的文档,我们会注意到:

  

在没有完全清理资源的情况下导致正常的程序终止。

这可能包括冲洗stdout。

答案 1 :(得分:0)

你应该知道的第一件事是STDOUT是行缓冲的,意味着它在获得'\ n'后刷新内存。第二件事是exit()刷新stdio缓冲区,而_exit()则不会。

现在在你的情况下,在第一个例子中,exit()刷新stdio缓冲区,所以它在_exit()中打印两个printf输出,没有发生刷新,所以它不打印两个printf语句。

如果要在第二个语句上获得正确的输出,请禁用缓冲 通过推荐

int main (void)
{
setbuf(stdout, NULL);
printf ("Using exit ... \ n");
printf ("This is the content in buffer");
_exit (0);
}