0809学习笔记(文件)

文件的三种缓冲方式

        行缓冲

        碰到换行符才刷新缓冲区

        全缓冲

        标准io库函数,往普通文件读写数据的,是全缓冲的

        碰到换行符也不刷新缓冲区,即缓冲区满了,才刷新缓冲区

        1、缓冲区满了刷新

        2、认为刷新缓冲区 fflush(文件指针)

        3、程序正常结束后会刷新缓冲区

        无缓冲

        在读写数据的时候通过系统调用io(read write),对文件进行读写

        即写数据会立马进入文件,读数据会立马进入内存

        流程

        应用程序空间——>内核空间——>驱动程序——>硬盘

        应用程序和内核程序在不同的空间里,目的是为了保护内核

        设置缓冲区的目的

        通过缓冲可以减少进出内核的次数,以提高效率

磁盘文件的分类

        文本文件:

        1、基于字符编码的文件,常见编码有ASCII、UNICODE等,一般可以直接用文本编辑器直接打开

        2、文本文件编码基于字符定长,译码容易些

        3、文本文件用通用的记事本就几乎可以浏览所有文本文件

        4、文本文件任何一个意思至少是一个字符

        二进制文件

        1、计算机的存储在物理上是二进制的

        2、基于值编码的文件

        3、把内存中的数据按其在内存中的存储形式原样输出到磁盘上

        4、二进制文件编码是变长的,译码难一些

        5、二进制文件用一个比特来代表一个意思(位操作)

        6、二进制文件空间利用率高

        7、二进制文件需要具体的文件解码器

        总结

        文件在硬盘上存储的时候,物理上都是用二进制来存储的

        操作文件时,是按照字节对文件来进行读写的,所以管文件又叫流文件,即把文件看做一个字节流

文件指针

        文件指针就是用于表示一个文件的,所有对文件的操作都是用对文件指针进行操作的

        文件指针形式

        定义方式:FILE *指针变量标识符(FILE必须为大写)

        对文件操作的步骤

        1、对文件进行读写等操作之前要打开文件得到文件指针

        FILE *pf=NULL;
        pf=fopen("test.txt","w+");//只读 

        2、读写操作

        3、关闭文件

        fclose(pf);

        打开文件fopen

        说明:fopen函数的功能是打开一个已经存在的文件,并返回这个文件的文件指针或创建一个文件并打开此文件,然后返回文件的标识,即指针

        参数1:打开文件的路径  需要加“”

        参数2:文件打开的方式  

 

         关闭文件

        fclose(文件指针)

        一个文件只能关闭一次,不能多次关闭

        成功返回0

        失败返回非0

读写文件

        fgetc:

        fgetc(ch,200,pf);  一次读一个字符  文件中读一个字符给ch 200次

        成功返回0

        失败返回EOF

         fgets:

        fgets(ch,n,pf); 读字符串 碰到换行或者末尾结束,或读取了n-1个字符结束,在读取的内容后面会加一个\0,作为字符串的结尾

        成功返回目的数组的首地址

        失败返回NULL

        fread:

        从参数4中读取数据,一次是参数2个字节,共参数3块,存放到参数1指向的内存里

        返回值:实际读到的块数

        fwrite:

        将参数1的数据写入参数4中,一块是参数2个字节,一共参数3块

#include <stdio.h>

int main()
{
	FILE *fp=NULL;
	fp=fopen("test.txt","w");
	fputc('A',fp);
	fclose(fp);
	
	fp=fopen("test.txt","a");
	fputc('B',fp);
	fclose(fp);
	
	char ch;
	fp=fopen("test.txt","r");
	ch=fgetc(fp);
	printf("%c\n",ch);
	fclose(fp);
	
	fp=fopen("test01.txt","w");
	fputs("行也思君 ",fp);
	fclose(fp);
	
	fp=fopen("test01.txt","a");
	fputs("坐也思君 ",fp);
	fclose(fp);
	
	char ch_1[20];
	fp=fopen("test01.txt","r");
	char *p=NULL;
	p=fgets(ch_1,20,fp);
	printf("%s\n",ch_1);
	fclose(fp);
	puts(p);
	
	return 0;
} 

结果

A
行也思君 坐也思君
行也思君 坐也思君

--------------------------------
Process exited after 0.02422 seconds with return value 0
请按任意键继续. . .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值