找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1700|回复: 0
打印 上一主题 下一主题
收起左侧

C语言中的刷新和定位函数

[复制链接]
跳转到指定楼层
楼主
ID:114320 发表于 2016-4-18 21:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一.fflush

1.fflush的原型如下:

intfflush(FILE *stream);

2.当需要立即把输出缓冲区的数据进行物理写入时,应该使用这个函数。例如调用fflush函数保证调试信息实际打印出来,而不是保存在缓冲区中直到以后才打印。

二.定位函数

1.在正常情况下,数据以线性的方式写入,这意味着后面写入的数据在文件中的位置是在以前所有写入数据的后面。C同时支持随机访问I/O,也就是以任意顺序访问文件的不同位置。随机访问是通过在读取或写入前,先定位到文件中需要的位置来实现的。

2.定位函数原型:

1>long ftell(FILE*stream);

2>intfseek(FILE *steam,long offset,intfrom);

3.ftell函数返回流的当前位置。即:下一个读取或写入将要开始的位置距离文件起始位置的偏移量。该函数允许保存一个文件的当前位置。

1>在二进制流中,这个值就是当前位置距离文件起始位置之间的字节数。

2>在文本流中,这个值表示一个位置,但它并不一定准确地表示当前位置和文件起始位置之间的字符数,因为有些系统将对行末字符进行翻译转换。但是,ftell函数返回的值总是可以用于fseek函数中,作为一个距离文件起始位置的偏移量。

4.fseek函数允许你一个流中定位。这个函数将改变下一个读取或写入操作的位置。它的第 1个参数是需要改变的流。它的第2和第3个参数标识文件中需要定位的位置。

1>试图定位到一个文件的起始位置之前是一个错误。定位到文件尾并进行写入将扩展这个文件。定位到文件尾之后并进行读取将导致返回一条“到达文件尾”的信息。

2>在二进制流中,从SEEK_END进行定位可能不被支持,所以应该避免。

3>在文本流中,如果from是SEEK_CUR或SEEK_END,offset必须是零。如果from是SEEK_SET,offset必须是一个从同一个流中以前调用ftell所返回的值。

5.用fseek改变一个流的位置会带来三个副作用。

1>首先,行末指示字符被清除。

2>其次,如果在fseek之前使用ungetc把一个字符返回到流中,那么这个被退回的字符会被丢弃,因为在定位操作以后,它不再是“下一个字符”。

3>最后,定位允许你从写入模式切换到读取模式,或者回到打开的流以便更新。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表