文件及文件的简单函数

文件

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;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值