FILE文件指针:
定义于include的stdio.h中
typedef struct {
short level; /* fill/empty level of buffer */
unsigned flags; /* File status flags */
char fd; /* File descriptor */
unsigned char hold; /* Ungetc char if no buffer */
short bsize; /* Buffer size */
unsigned char *buffer; /* Data transfer buffer */
unsigned char *curp; /* Current active pointer */
unsigned istemp; /* Temporary file indicator */
short token; /* Used for validity checking */
} FILE;
其中还有一个特殊的EOF的定义:
#define EOF (-1)
主要包含的函数:
FILE *fopen(char *name,char *mode);
mode说明:
"rt" 只读打开一个文本文件,只允许读数据
"wt" 只写打开或建立一个文本文件,只允许写数据
"at" 追加打开一个文本文件,并在文件末尾写数据
"rb" 只读打开一个二进制文件,只允许读数据
"wb" 只写打开或建立一个二进制文件,只允许写数据
"ab" 追加打开一个二进制文件,并在文件末尾写数据
"rt+" 读写打开一个文本文件,允许读和写
"wt+" 读写打开或建立一个文本文件,允许读写
"at+" 读写打开一个文本文件,允许读,或在文件末追加数 据
"rb+" 读写打开一个二进制文件,允许读和写
"wb+" 读写打开或建立一个二进制文件,允许读和写
"ab+" 读写打开一个二进制文件,允许读,或在文件末追加数据
int getc(FILE *fp);
返回fp指向的输入流中的下一个字符。如果达到文件尾或者出现错误,该函数将返回EOF
int putc(int c,FILE *fp);
将字符c写入fp指向的文件中,并返回写入的字符,如果发生错误,返回EOF
int fclose(FILE *fp);关闭文件,释放文件指针。在stdio.h中定一个最大打开的文件数
#define OPEN_MAX 20 /* Total of 20 open files */
所以打开的文件要及时关闭。
int fgetc(FILE *stream);
返回stream流的下一个字符,返回类型为unsigned char(强制转换为int),如果到达文件尾或错误,返回EOF
char *fgets(char *s,int n,FILE *stream);
将下n-1个字符读入数组s中。当遇到'/n'后,把'/n'读入数组s中,读取过程终止。数组以'/0'结尾。如果遇到文件末尾或者错误,返回NULL。
int fputc(int c,FILE *stream);
把c转换成unsigned char 型输出到流stream中,返回写入的字符,出错返回EOF
int fputs(const char *s,FILE *stream);
把字符串s输出到流stream中,返回非负值,出错返回EOF
int ungetc(int c,FILE *stream);
把字符c写回到流stream中,下次对该流操作时,返回该字符。对每个流只能写回一个字符,且此字符不能是EOF。unget返回被写回的字符,如果发生错误,返回EOF
int fprintf(FILE *streame,const char *format,...);
返回实际写入的字符数。若出错返回一个负值。
int fscanf(FILE *stream,const char *format,...);
根据格式串format从流stream中读取输入,并把转换后的值赋值给后续的各个参数,其中的每个参数都必须是一个指针。当格式串format用完时,函数返回。如果达到文件的末尾或在转换输入前出错,该函数返回EOF;否则,返回实际被转换并赋值的输入项数目。
int fread(void *buf,int size,int count,FILE *stream);
从stream指向的流文件读取最多count(对象数)个对象,每个对象为size(字段长度),并把他们放在buf指向的字符数组中。返回读取的对象数目,此返回值可能小于count。通过函数feof和ferror获得结果执行状态。
int fwrite(void *buf,int size,int count,FILE *stream)
从buf指向的字符数组中,把count个对象写到stream所指向的流中,每个字段为size个字符长,函数操作成功时返回所写对象数。如果发生错误,返回值会小于count的值。
随机文件读写
int fseek(FILE *stream,long offset,int origin)
设置流stream的文件位置,后续的读写操作将从新位置开始。对于二进制文件,此位置被设置为从origin开始的offset个字符处。origin的值可以为SEEK_SET(文件开始处)、SEEK_CUR(当前位置)或SEEK_END(文件结束处)。对于文本流,offset必须设置为0,或者由函数ftell返回的值(此时origin的值必须是SEEK_SET)。fseek函数在出错时返回一个非0值。
long ftell(FILE *stream)
ftell函数返回stream流的当前文件位置,出错时返回-1L
void rewind(FILE *stream)
rewind(fp)函数等价于语句fseek(fp,0L,SEEK_SET);clear(fp);的结果
int fgetpos(FILE *stream,fpos_t *ptr)
把stream流的当前位置记录在*ptr中,供随后的fsetpos函数调用使用。若出错返回一个非0值
int fsetpos(FILE *stream,const fpos_t *ptr)
将流stream的当前位置设置为fgetpos记录在*ptr中的位置,出错返回一个非0值
FILE *freopen(const char *path,const char *mode,FILE stream)
j将一个流与一个文件相连
例:freopen("t1.txt","w",stdout);putchar(ch);ch写入到文件t1.txt中
freopen("t2.txt","r",stdin);ch=getchar();从t2.txt读取字符