1. 文件IO有两种
标准CIO : 标准C库为我们提供的函数
Linux文件IO: Linux系统自带的函数
2. Linux存在全缓存 默认是512字节
行缓存: 前提条件,写入的文件是终端
3//打开文件
FILE* fp = fopen("./test.c","r");
if(fp == NULL)
{
perror("fopen failed");
printf("fopen failed:%s\n",strerror(errno));
}
//"r" 只读
//"r+" 读 + 写
//"w" 只写 + 创建 + 清空
//"w+" 写+ 读 + 创建 + 清空
//"a" 只追尾写 + 创建
//"a+" 追尾写 + 读 + 创建
(1) 咬文嚼字读
//文件拷贝
//方法一
//循环,读一个写一个
while(1)
{
ch = fgetc(fpr);
if(ch == EOF)//读取到文件的尾巴,结束
break;
fputc(ch, fpw);
}
//方法二
while((ch=fgetc(fpr)) != EOF)
fputc(ch, fpw);
(2) 一行一行的读取和写入
char buf[100];
//文件拷贝
//当 fgets返回值是NULL的时候,读取到文件的尾巴
while(fgets(buf, 100, fpr) != NULL)
{
fputs(buf, fpw);
}
重点: 标准IO存在缓存区
如何刷新缓存区手动 fflush(fp);
fclose(fp);. 针对于文件的操作 打开 读 写 关闭
#include <stdio.h>\n
buf ---> 15
#include <stdi\0
strlen(buf) ---> 14
buf[14-1] == '\n'
count++;
buf ---> 15
012345
o.h>\n\0
strlen(buf) ---> 5
buf[5-1]
buf[strlen(buf)-1] == '\n'
(3) 一次读取一大片
char buf[100];
fread(buf, 1, 100, fpr);//返回值的意义:实际读取到的块数(记录数,对象数)
fread(buf, 2, 50, fpr);//一块的大小是2个字节,一次最多读取50块
while((ret=fread(buf,1,100,fpr)) > 0)//ret里面保存的是每次实际读取到的块数
fwrite(buf,1,ret,fpw);//第三个参数代表实际写入的块数
#include <string.h>
memset(buf, '\0', sizeof(buf));