一、字符读写文件流
字符读操作
extern int fgetc(FILE *stream);//从流中读取一个字符
extern int getc(FILE *stream);
extern int getchar(void);//从标准输入设备,度一个字符
若调用成功返回读到的内容,如果失败则返回EOF(-1)
getc()这个宏不是建立在fgetc的基础上的,所以getc一定比fgetc的速度快,而且速度应用并不是两者使用的主要问题,而是参数传递
字符写操作
extern int fputc(int c,FILE *stream);//将字符C写入到流stream中
extern int putc(int c,FILE *stream);
extern int putchar(int c);//写字符C到标准输出设备
若调用成功返回内容,如果失败则返回EOF(-1)
二、行读写文件流
行读出操作
extern char *fgets(char *s,int n,FILE *stream)
此函数将字符从stream读入s指向的数组,直到读取n-1字符、换行符或遇到文件结束标志为止
extern char *gets(char *s)//从标准设备输入读取数据
此函数将字符从标准输入流stdin读入s所指向的数组,直到遇到换行符或文件结束标志为止。此函数尽量不要使用,因其对输出量没有限制
成功完成后fgets()和gets()都返回s,如果流位于文件末尾,则设置此流的文件结束指示器,并返回一个空指针。如果出现读取错误,则设置了流的错误指示符,并将error设置为指示此错误
行写入操作
extern char *fputs(char *s,FILE *stream)
extern char *puts(const char *s)
成功完成后,函数均返回非负数。否则返回EOF,并为流设置错误提示符,将error设置为指示错误
三、块读写文件流
块读写文件流是指每次读出和写入的数据量可以由自己设定
块读出操作
extern size_t fread(void *ptr,sieze_t_size,size_t_n,FILE *stream)
此函数将从标准流中读取n个大小为size的对象。第一个参数为指向欲存放读取的对象空间指针,即读取的对象的存放位置;第二个参数为读取对象的大小,例如读出一个结构体buf,此参数可以设置为sizeof(struct buf);第三个参数为读取对象的个数;第四个参数为读取的流
此函数返回实际读取到的对象个数,如果此值比参数n小,则代表可能读到了文件袋尾部或者出错,这时必须用feof()或者ferror()来检测发生了什么
块写入操作
extern size_t fwrite(void *ptr,sieze_t_size,size_t_n,FILE *stream)
此函数将从标准流中写入n个大小为size的对象。第一个参数为指向欲存放写入的对象的数据空间指针,即写入的对象的存放位置;第二个参数为写入对象的大小,例如读出一个结构体buf,此参数可以设置为sizeof(struct buf);第三个参数为写入对象的个数;第四个参数为写入的流
如果执行成功,此函数返回实际写入的对象个数,否则返回-1。
文件流定位
一、返回当前读写位置
extern long int ftell(FILE *stream);
如果执行成功,将返回指针当前指针位置,否则返回-1
二、修改当前读写位置
extern int fseek(FILE *stream,long int,int whence);
第二个参数为针对第三个参数(修改基准)的偏移量,第三个参数为修改位置的基准
#define SEEK_SET 0 //文件开始位置
#define SEEK_CUR 0 //当前位置
#define SEEK_END 0 //文件结束位置
三、重置当前读写位置
extern void rewind(FILE *stream)