练习8-3

_flushbuf这个函数与教材书上的没什么太大区别,思路是一样的.

首先判断fp文件是否在表示已经打开的数组_iob中
因为LINUX要对文件操作都需要先打开该文件.

然后判断该文件是否是需要写操作.只有写操作才用的上_flushbuf

然后判断是否需要缓冲区.并以此设置缓冲区大小.

然后如果缓冲区未设置,将开辟一块缓冲区供其使用,如果遇到错误.那么将文件状态设置为出错.并返回EOF.

如果缓冲区已经存在,就判断缓冲区中的内容有多少.保存在nc中.
然后将缓冲区base指向的nc个字符写入文件中.如果写入的数量与缓冲区中不一样,则表明发生了错误.

因为需要将已经传到_flushbuf函数的第一个参数那个字符也放入缓冲区.所以整体的缓冲区容量要-1.来容纳它.
这个是因为putc会一直会向缓冲区中写入字符,如果缓冲区满了,则会将最后这个字符以参数的形式传给_flishbuf,用他来重置缓冲区,而这个字符自然不能丢,所以直接就写入了缓冲区.

然后先看fflush函数.

先判断是否程序已经打开该文件.
然后如果是写的方式打开的文件,就调用_flushbuf函数.
_flushbuf函数会将缓冲区的内容用write系统调用写入文件中.而那个参数0会在写入文件之后才写入已经被刷新的缓冲区中.而这个缓冲区等一下就会被fclose释放.所以不用在意.

fclose就是释放这个文件指针.
首先通过fflush将缓冲区的数据写入文件没出错的话继续向下.
释放缓冲区空间.
重置指针,计数器和打开方式.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容