文件
文件句柄
typedef struct {
short level; //缓冲区满或空的状态
unsigned flags; //文件状态标志
char fd; //文件描述符
unsigned char hold; //如无缓冲区不读取字符
short bsize; //缓冲区的大小
unsigned char *buffer; //数据缓冲区的位置
unsigned ar; //指针,当前的指向
unsigned istmp; //临时文件,指示器
short token; //用于有效性的检查
}FILE;
文件操作api
fgetc fputc 按照字符读写文件
fgets fputs 按照行读写文件(读写配置文件)
fread fwrite 按照块读写文件(大数据块迁移)
fprintf fscanf 按照格式化进行读写文件
fopen() 打开文件
参数1: FILE 指针
参数2: 打开方式:r+ 追加读写; w+覆盖写读; r 只读; rb二进制只读; rt普通文本只读
fflush() 刷新缓冲取
fclose() 关闭文件
char buf[] = "this is a file";
FILE *fp = fopen("./file.txt", "w+"); //w+覆盖写
fputs(buf, fp);
fflush(fp);
fclose(fp);
基本操作
fputc('a', stdout); //输出到标准输出
fputc('d', stderr); //输出到标准错误输出
char ch = fgetc(stdin); //从标准输入中获取
feof(fp); //是否到结尾
fgets(buf, sizeof(buf), fp); //整行读取,sizeof(buf)表示读取的最大值,以\n作为换行符,读取完毕后,自动加字符串结束符0
块操作
typedef struct Student{
char name[30];
int age;
} Student;
FILE *fp = fopen("./file.txt", "w+");
Student s[3] = NULL;
char buf[30];
for(int i=0;i<3;i++){
sprintf(buf, "student_%d", i);
strcpy(s[i].name, buf);
}
//按块写文件
//s, 即将写入文件内容的内存首地址
//sizeof(Student) 单个块数据的大小
//3, 块数,写多少块数据
//fp, 文件指针
//返回值,成功写入文件的块数
int count = fwrite(s, sizeof(Student), 3, fp);
if (fp!=NULL) {
fclose(fp);
fp = NULL;
}
//按块读文件
//s, 读取文件内容的内存首地址
//sizeof(Student) 单个块数据的大小
//3, 块数,写多少块数据
//fp, 文件指针
//返回值,成功读取文件的块数
int count = fread(s, sizeof(Student), 3, fp);
文件光标位置切换
/**
* fp 文件指针
* offset 光标定位位置后的偏移量
* whence 移动到哪个位置, SEEK_SET 光标定位到文件开头;SEEK_SET 光标定位到当前位置;SEEK_END 光标定位到文件结尾
*/
int fseek(FILE *fp, long offset, int whence);
// fseek (fp, -10, SEEK_END); //光标定位到文件结尾,然后向左偏移10个字节
/**
* 从开始到光标当前位置的字节数
*/
int ftell(FILE *fp);
/**
* 光标回到文件开始位置
*/
int rewind(FILE *fp);






网友评论