作业帮 > 综合 > 作业

Linux中_exit()与exit()问题

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/11 00:25:35
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()问题
_exit那行,即使不是_exit也不会输出——这就是linux下的I/O缓冲机制的体现.在win下会,不信你试.
加\n能输出不是_exit清缓冲的结果.printf自己自身刷新了缓冲.——printf \n时,默认printf强行刷新I/O缓冲,不管缓冲区空间是否已满需要刷新.因它(系统或系统设计者)认为换行是一个需要立即反应体现用户指令作用的用户暗示.
_exit不是标准C的东东.
再问: Linux下不写_exit,也不写return 默认还是会输出的,至少我用的ubuntu会。
再答: 不写_exit,改成写int i=0;(后面任意,_exit,exit,return任意) 是在”int i=0;“之前输出呢?是在”int i=0;“之后输出?你试下。
再问: 神马意思? int i=0; printf("%d",i); 么?还是什么?不大明白你的 意思啊
再答: 不董? 就莫看了~ 做点别的。