博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
清除和设置文件缓冲区,文件随机读写
阅读量:4211 次
发布时间:2019-05-26

本文共 1797 字,大约阅读时间需要 5 分钟。

清除和设置文件缓冲区 (1).清除文件缓冲区函数:int fflush(FILE *stream);int flushall(); fflush()函数将清除由stream指向的文件缓冲区里的内容,常用于写完一些数据后,立即用该函数清除缓冲区,以免误操作时,破坏原来的数据。flushall()将清除所有打开文件所对应的文件缓冲区。(2).设置文件缓冲区函数 void setbuf(FILE *stream,char *buf); void setvbuf(FILE *stream,char *buf,int type,unsigned size);这两个函数将使得打开文件后,用户可建立自己的文件缓冲区,而不使用fopen()函数打开文件设定的默认缓冲区。               对于setbuf()函数,buf指出的缓冲区长度由头文件stdio.h中定义的宏BUFSIZE的值决定,缺省值为512字节。当选定buf为空时,setbuf函数将使的文件I/O不带缓冲。而对setvbuf函数,则由malloc函数来分配缓冲区。参数size指明了缓冲区的长度(必须大于0),而参数type则表示了缓冲的类型,其值可以取如下值:type 值             含义 	_IOFBF        文件全部缓冲,即缓冲区装满后,才能对文件读写 	_IOLBF        文件行缓冲,即缓冲区接收到一个换行符时,才能对文件读写_IONBF        文件不缓冲,此时忽略buf,size的值,直接读写文件,不再经过文件缓冲区缓冲5.文件的随机读写函数前面介绍的文件的字符/字符串读写,均是进行文件的顺序读写,即总是从文件的开头开始进行读写。这显然不能满足我们的要求,C语言提供了移动文件指针和随机读写的函数,它们是:(1).移动文件指针函数: 	long ftell(FILE *stream); 	int rewind(FILE *stream); 	fseek(FILE *stream,long offset,int origin); 函数ftell()用来得到文件指针离文件开头的偏移量。当返回值是-1时表示出错。rewind()函数用于文件指针移到文件的开头,当移动成功时,返回0,否则返回一个非0值。fseek()函数用于把文件指针以origin为起点移动offset个字节,其中origin指出的位置可有以下几种:  	origin           数值             代表的具体位置SEEK_SET          0               文件开头SEEK_CUR          1               文件指针当前位置SEEK_END          2               文件尾例如:  fseek(fp,10L,0); 把文件指针从文件开头移到第10字节处,由于offset参数要求是长整型数,故其数后带L。fseek(fp,-15L,2);把文件指针从文件尾向前移动15字节。 (2).文件随机读写函数int fread(void *ptr,int size,int nitems,FILE *stream);int fwrite(void *ptr,int size,int nitems,FILE *stream);               fread()函数从流指针指定的文件中读取nitems个数据项,每个数据项的长度为size个字节,读取的nitems数据项存入由ptr指针指向的内存缓冲区中,在执行fread()函数时,文件指针随着读取的字节数而向后移动,最后移动结束的位置等于实际读出的字节数。该函数执行结束后,将返回实际读出的数据项数,这个数据项数不一定等于设置的nitems,因为若文件中没有足够的数据项,或读中间出错,都会导致返回的数据项数少于设置的nitems。当返回数不等于nitems时,可以用feof()或ferror()函数进行检查。fwrite()函数从ptr指向的缓冲区中取出长度为size字节的nitems个数据项,写入到流指针stream指向的文件中,执行该操作后,文件指针将向后移动,移动的字节数等于写入文件的字节数目。该函数操作完成后,也将返回写入的数据项数。

 

转载地址:http://iqzmi.baihongyu.com/

你可能感兴趣的文章
Android编译系统环境初始化过程分析
查看>>
user2eng 笔记
查看>>
DRM in Android
查看>>
ARC MRC 变换
查看>>
Swift cell的自适应高度
查看>>
【linux】.fuse_hiddenXXXX 文件是如何生成的?
查看>>
【LKM】整合多个LKM为1个
查看>>
【Windows C++】调用powershell上传指定目录下所有文件
查看>>
Java图形界面中单选按钮JRadioButton和按钮Button事件处理
查看>>
小练习 - 排序:冒泡、选择、快排
查看>>
SparkStreaming 如何保证消费Kafka的数据不丢失不重复
查看>>
Spark Shuffle及其调优
查看>>
数据仓库分层
查看>>
常见数据结构-TrieTree/线段树/TreeSet
查看>>
Hive数据倾斜
查看>>
TopK问题
查看>>
Hive调优
查看>>
HQL排查数据倾斜
查看>>
DAG以及任务调度
查看>>
LeetCode——DFS
查看>>