“缓冲”知识的补充
在周三的时候,学姐讲了进程方面的知识,不过对于某一个程序用到return 和 exit 之后使得父子进程输出数据的结果是随机的这一问题的讲解,我还是有些疑惑。
晚上组长过来了解我学习情况,我说出了自己对这个问题的疑惑,然后组长以自己“Understanding Learning”的态度,给我普及了一下“缓冲机制”。
缓冲机制有三种,分别为:
1> 全缓冲:他指的是系统在填满标准IO缓冲区之后,才进行实际的IO操作;需要注意的是:对于驻留在磁盘上的文件来说,通常是由标准IO库实施全缓冲。组长特别强调它与行缓冲的区别在于:是否与人进行交互。
2> 行缓冲:在这种情况下,标准IO在输入和输出中遇到换行符时执行IO操作;需要注意的是:当流涉及终端时,通常使用行缓冲(即进行人机交互时)。
3> 无缓冲:他指的是标准IO库不对字符进行缓冲存储;需要注意的是:标准出错流stderr( ) 和 write( ) 通常是无缓冲的。
这里提一下这几个退出函数,毕竟是由他们所引起的问题思考:
1> return ( ) : 是当前函数的返回,当然如果是在主函数main,自然就结束当前进程啦,如果不是,那就是退回上一层调用。在多个进程时,如果有时要检测上进程是否正常退出的,就要用到上个进程的返回值,以此类推。
2> exit ( ) : 用来正常终结目前进程的执行,并把参数status返回给父进程,而进程所有的缓冲数据会自动写回并关闭未关闭的文件。void exit ( int status );exit ( )结束当前进程/当前程序,在整个程序中,只要调用exit就会结束。
3> _exit () : 主要区别于exit (),因为相比于exit ()函数,它不进行清理工作而直接进入内核。而exit函数调用之后先进性一系列的清理处理,包括调用执行各终止处理程序,关闭所有标准IO流等,然后进入内核。