普通文件io总结
file结构体
typedef struct
{
int level; /*填充/清空一级缓存*/
unsigned flag; /*文件状态指针*/
char fd; /*文件描述符*/
unsigned char hold; /*ungetc char if no buffer*/
int bsize; /*缓存区大小*/
unsigned char *buffer; /*数据缓冲区*/
unsigned char *curp; /*当前活动指针*/
unsigned istemp; /*临时文件指示器*/
short token; /*用于有效性检查*/
}file;
打开文件fopen函数
文件指针名=fopen(文件名,使用文件方式)
eg:
file *fp; //文件指针
fp=("file a","r"); //以只读方式打开hzk16
打开方式有:
描述符意义
“rt”
只读打开一个文本文件,只允许读数据
“wt”
只写打开或建立一个文本文件,只允许写数据
“at”
追加打开一个文本文件,并在文件末尾写数据
“rb”
只读打开一个二进制文件,只允许读数据
“wb”
只写打开或建立一个二进制文件,只允许写数据
“ab”
追加打开一个二进制文件,并在文件末尾写数据
“rt+”
读写打开一个文本文件,允许读和写
“wt+”
读写打开或建立一个文本文件,允许读写
“at+”
读写打开一个文本文件,允许读,或在文件末追加数 据
“rb+”
读写打开一个二进制文件,允许读和写
“wb+”
读写打开或建立一个二进制文件,允许读和写
“ab+”
读写打开一个二进制文件,允许读,或在文件末追加数据
fopen若过出错则,返回一个null可以用作错误异常处理的判断条件;
fclose函数
用于关闭当前文件 fclose(file*);返回值为0表示正确,非零错误。
文件读写操作:
·字符读写函数 :fgetc和fputc·字符串读写函数:fgets和fputs·数据块读写函数:freed和fwrite·格式化读写函数:fscanf和fprinf
fgetc(filr*)与fputc(const char,file*)/fputc(char,file*):
fgetc每次在文件中读一个字节,每读一次文件内的字符指针往后挪一位,可多次重复使用依此读出文件内容。
fput函数每次写入一个字符,每写一次文件内指针向后挪动一位,可多次连续使用写入。
fgets(char* buf, int n, file*)与fputs(char* buf, file*):
从文件中读出 n-1 个字符放入buf中
fputs将字符串写入文件中
fread(cahr* buf, int size, int count,file* fp)与fwrite(char* buf, int size, int count,file* fp)
fread 从fp中读入conut个size长度的字符串到buf中
fwirte从buf中读出count个size个长度的字符串到fp中
fscanf(file*, 格式, 列表)和 fprintf(file*, 格式, 列表)
eg:
fprintf(fp,"%s %d %d %s",pp->name,pp->num,pp->age,pp->addr);
fscanf(fp,"%s %d %d %s",qq->name,&qq->num,&qq->age,qq->addr);
rewind(file*)
将文件内部指针移到文件首
fseek(file* fp,int count,int startpoint)
fp 文件指针
count 位移量,表示从startpoint开始计算位移量
startpoint有三种形式:
起始点表示符值
首
seek—set
0
当前
sseek-cur
1
尾
sseek-end
2
设置bu模式函数
#include
void setbuf(file *stream, char *buf);
int setvbuf(file *stream, char *buf, int mode, size_t size);
void setbuffer(file *stream, char *buf, size_t size);
void setlinebuf(file *stream);
setbuf 与 setvbuf 指定缓冲区(在读写文件之前),将不再使用系统默认的缓冲区
setbuf(fp, null) 使得文件不带缓冲区
setbuf(ffp , null, _ionbf , 0 ) 在此情况下与setbuf(fp, null)相同
setbuf 中参数:
stream表示操作文件;
buf 缓冲区,;
mode 模式;
size 大小。
setbuffer函数
此函数与setbuf函数类似,好在可自定义buf的大小
setlinebuf函数
此函数等价于setvbuf(fp, (char *) null, _iolbf, 0);
小点:
stdin 0 标准输入
stdout 1 标准输出
stderr 2 标准错误
_ionbf 无缓冲
_iolbf 行缓冲
_iofbf 全缓冲
_io_line_buf 行缓冲
_io_unbuffered 无缓冲
对io普通文件操作整理,有错误请指出;
参考: