数据块读写:整块copy,速度较快,但是是二进制操作
#include <stdio.h>
① size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fread 从文件流stream 中读取nmemb 个元素,写到ptr 指向的内存中,每个元素的大小为size 个
字节。
② size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE stream);
fwrite 从ptr 指向的内存中读取nmemb 个元素,写到文件流stream 中,每个元素size 个字节。
所有的文件读写函数都从文件的当前读写点开始读写,读写完以后,当前读写点自动往后移动
sizenmemb 个字节
格式化读写:
int fprintf(FILE *stream, “%d %s %d”,num,name,score); 将格式化后的字符串写入到文件流stream 中
(同)int sprintf(char *str, const char *format, …);
int fscanf(FILE *stream, “%d %s %d”,num,name,score);将文件流stream 中的数据按照格式读出,存 到name,num,score中。
(同)int sscanf(char *str, const char *format, …);
单个字符读写:
使用下列函数可以一次读写一个字符
#include <stdio.h>
int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
int getc(FILE stream); 等同于fgetc(FILE stream)
int putc(int c, FILE stream); 等同于fputc(int c, FILE stream)
int getchar(void); 等同于fgetc(stdin);
int putchar(int c); 等同于fputc(int c, stdout);
getchar 和putchar 从标准输入输出流中读写数据,其他函数从文件流stream
中读写数据。
字符串读写:
char *fgets(char *s, int size, FILE *stream);
int fputs(const char *s, FILE *stream);
int puts(const char *s); 等同于fputs(const char *s,stdout);
char *gets(char *s); 等同于fgets(const char *s, int size,
stdin);
fgets 和fputs 从文件流stream 中读写一行数据;
puts 和gets 从标准输入输出流中读写一行数据。
fgets 可以指定目标缓冲区的大小,所以相对于gets 安全,但是fgets 调用
时,如果文件中当前行的字符个数大于size,则下一次fgets 调用时,将继
续读取该行剩下的字符,fgets 读取一行字符时,保留行尾的换行符。
fputs 不会在行尾自动添加换行符,但是puts 会在标准输出流中自动添加一
换行符。