文件
1.文件的三种缓存方式
1.1行缓存
标准io库函数,往标准输出(屏幕)输出东西的时候是行缓中的
所谓的行缓}中就是缓中区碰到换行符的时候才同新缓中区
如果不刷新缓中区,无法对文件执行读写操作
1.2.全缓冲
标准io库函数,往普通文件读写数据的,是全缓冲的,碰到换行符也不刷新缓冲区,即缓冲区满了,才刷新缓冲区刷新缓冲区的情况
1)缓冲区满了,刷新缓冲区
2)人为刷新缓冲区flush(文件指针)
3)程序正常结束会刷新缓冲区
1.3.无缓冲
在读写文件的时候通过系统调用io ( read write ) ,对文件进行读写数据这个时候是无缓冲的,即写数据会立马进入文件,读数据会立马进入内存
写文件的流程
应用程序空间—>内核空间->驱动程序->硬盘上
应用程序和内核程序运行在不同的空间里,目的是为了保护内核。
设置缓冲区的目的
通过缓冲可以减少进出内核的次数,以提高效率。
2.文件指针
2.1定义文件指针的一般形式
FILE *指针变量标识符
FILE 要大写,并要包含<stdio.h>
2.2对文件操作的步骤:
1)对文件进行读写等操作之前要打开文件得到文件指针
2)可以通过文件指针对文件进行读写等操作
3)读写等操作完毕后,要关闭文件,关闭文件后,就不能再通过此文件指针操作文件了
3.对文件操作
3.1 打开文件
FILE *pf;
pf=fopen("文件名","文件打开模式");
模式 | 功能 |
r或rb | 以只读方式打开一个文本文件或二进制文件(b)(不创建文件) |
w或wb | 以写方式打开文件(使文件长度截断为O字节,创建一个文件) |
a或ab | 以添加方式打开文件,即在末尾添加内容,当文件不存在时,创建文件用于写 |
r+或rb+ | 以可读、可写的方式打开文件(不创建新文件) |
w+或wb+ | 以可读、可写的方式打开文件(使文件长度为0字节,创建-一个文件) |
a+或ab+ | 以添加方式打开文件,打开文件并在末尾更改文件(如果文件不存在,则创建文件) |
3.2关闭文件
fclose(pf);
3.3读写文件
1)fputs
fputs(“所要写入文件的内容”,"文件指针");
fputs读取成功后,返回值是0
参数1:数据来源地址
参数2:目的文件指针变量(写入到文件指针变量指向的文件)
2)fgets:
fgets( ch,n,pf)
fegts读取成功后,返回值与str地址一致,否则不一致
单行:1.读够n-1个字符,就会停止 2.如果不够n-1,就的读取实际字符数
多行:遇到换行符,读入换行符后,停止读取后面内
参数1:目的地址(从文件中读取的内容,需要放置在内存中的地址)
参数2:读取n各字节,读取的字符数量是n-1
参数3:来源地址,文件指针指向文件缓冲区
3)fread:
pf=fopen("test.txt","r");
char str02[20];
fread(str02,1,4,pf);
printf("%s \n",str02);
fclose(pf);
参数1: 目的地址(从文件中读取的内容,需要放置在内存中的地址)
参数2:类型大小
参数3:所要读取的数量
参数4:来源地址,文件指针指向文件缓冲区
4)fwrite:
pf=fopen("test.txt","a");
char str01[]="123456789";
fwrite(str01,1,4,pf);
fclose(pf);
参数1: 目的地址(从文件中读取的内容,需要放置在内存中的地址)
参数2:类型大小
参数3:所要写入的数量
参数4:来源地址,文件指针指向文件缓冲区
作业:编写程序,实现向test.txt写入字符串“hello”。
编写程序,将test.txt的字符读入到str[50],并输出到终端窗口
编写程序,在test.txt文件后面追加字符串“test r-w-a”
要求:使用fputs,fgets,fread,fwrite函数。
#include <stdio.h>
/*编写程序,实现向test.txt写入字符串“hello”。
编写程序,将test.txt的字符读入到str[50],并输出到终端窗口
编写程序,在test.txt文件后面追加字符串“test r-w-a”
要求:使用fputs,fgets,fread,fwrite函数。
*/
void test1()
{
FILE *pf=NULL;
pf=fopen("test.txt","w");
if(NULL==pf)
{
printf("test.txt文件不存在\n");
}
else
{
fputs("hello",pf);
}
fclose(pf);
char str[50];
pf=fopen("test.txt","r");
fgets(str,10,pf);
printf("%s \n",str);
fclose(pf);
pf=fopen("test.txt","a");
char str01[]="123456789";
fwrite(str01,1,4,pf);
fclose(pf);
pf=fopen("test.txt","r");
char str02[20];
fread(str02,1,4,pf);
printf("%s \n",str02);
fclose(pf);
}
int main()
{
test1();
return 0;
}