Linux中_exit()与exit()问题简短的几行代码.#include ;int main(){printf("%c",'c');_exit(0);}程序并没有输出"c",说明_exit()没有进行io flush.问:此程序应当是顺序执行啊,为什么没有输出 c _exit关这个在它之前

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/13 05:32:33
Linux中_exit()与exit()问题简短的几行代码.#include ;int main(){printf(

Linux中_exit()与exit()问题简短的几行代码.#include ;int main(){printf("%c",'c');_exit(0);}程序并没有输出"c",说明_exit()没有进行io flush.问:此程序应当是顺序执行啊,为什么没有输出 c _exit关这个在它之前
Linux中_exit()与exit()问题
简短的几行代码.
#include ;
int main()
{
printf("%c",'c');
_exit(0);
}
程序并没有输出"c",说明_exit()没有进行io flush.
问:此程序应当是顺序执行啊,为什么没有输出 c _exit关这个在它之前的printf什么事?如果换成exit()函数却可以输出.
经过我们院里的众大神指点,明白了.printf是带有缓冲的IO函数.此处的代码执行是按照顺序执行.但是由于printf有缓冲,输出写到了缓冲区并未显示.而执行到exit()函数时,由于exit会清理缓存,所以缓冲写到标准输出.而_exit()不会清理缓存而直接退出,所以不会有输出产生.但是有时也产生输出时:当printf内有\n时,会清理缓存,此时的_exit()会输出.

Linux中_exit()与exit()问题简短的几行代码.#include ;int main(){printf("%c",'c');_exit(0);}程序并没有输出"c",说明_exit()没有进行io flush.问:此程序应当是顺序执行啊,为什么没有输出 c _exit关这个在它之前
_exit那行,即使不是_exit也不会输出——这就是linux下的I/O缓冲机制的体现.在win下会,不信你试.
加\n能输出不是_exit清缓冲的结果.printf自己自身刷新了缓冲.——printf \n时,默认printf强行刷新I/O缓冲,不管缓冲区空间是否已满需要刷新.因它(系统或系统设计者)认为换行是一个需要立即反应体现用户指令作用的用户暗示.
_exit不是标准C的东东.