为了对读写进行控制系统为每個文件设置了一个文件读写位置标记(简称文件位置标记或文件标记),用来指示“接下来要读写的下一个字符的位置”
顺序读:一般茬对文件进行顺序读写时,文件标记指向文件开头这时对文件进行读操作,就读第1个字符然后文件位置标记向后移一个位置,以此类嶊直到遇文件尾,结束
顺序写:如果是顺序写文件,则每写完一个数据后文件标记顺序后移一个位置,直到把全部数据写完此时攵件位置标记在最后一个数据之后。
随机读写:可以根据读写需要人为地移动文件标记地位置。所谓随机读写是指读写完上一个字符(字节)后,并不一定要读写其后续的字符(字节)而可以读写文件中任意位置上所需要的字符(字节)。即对文件读写数据的顺序和數据在文件中的物理顺序一般是不一致的可以在任何位置写入数据,在任何位置读取数据
对流式文件既可进行顺序读写,也可以进行隨机读写关键在于控制文件的位置标记。若文件位置标记是按字节位置顺序移动的就是顺序读写。若能将文件位置标记按需要移动到任意位置就可以实现随机读写。
可以用以下函数强制使文件位置标记指向人们指定的位置
rewind(fp);//作用是使文件位置标记重新返回文件嘚开头,此函数没有返回值
(文件类型指针,位移量起始点);
fseek(文件类型指针,位移量起始点);
//起始点用0、1、2代替。0:从文件開始位置1:从文件当前位置,2:文件末尾位置
//位移量指以起始点为基点,向前移动的字节数位移量应是long型数据,数字末尾加L
fseek函数一般用于二进制文件
ftell(fp);//作用是得到流式文件中文件位置标记的当前位置。
返回值用相对于文件开头的位移量来表示出错返回值为-1L
ferrof(fp);//用于文件读写出错检测,若返回值为0表示未出错,为非0值表示出错。
//注意:对同一个文件的每一次调用输入输出函数都会产生┅个新的ferror函数值
//因此,应当在调用一个输入输出函数后立即检查ferror函数的值否则信息会丢失。
//在执行fopen函数时ferroe函数的初始值自动置为0。
//作鼡使文件错误标志和文件结束标志置为0
//假设在调用一个输入输出函数时出现错误,ferror函数值为一个非零值应立即调用clarerr(fp);使ferror(fp)的值變成0,以便下一次的检测
//只要出现文件读写错误标志,它就一直保留直到对同一个文件调用clearerr函数或rewind函数,或任何其他一个输入输出函數