C语言文件01

文件

文件概念

凡是使用过文件的人对文件都不会感到陌生,文件是用来存放程序、文档、音频、视频数据、图片等数据的。文件就是存放在磁盘上的一些数据的集合。

程序文件

包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj)可执行程序(windows环境后缀为exe)。

数据文件

文件的内容不一定是程序,而是程序运行时读写的数据。比如程序运行需要从中读取数据的文件,或者输出内容的文件。

文件名

一个文件要有一个唯一的文件标识便于用户识别和引用。文件名包含3部分:文件路径+文件名+文件后缀

例如:C:\code\test.txt

文件类型

根据数据的组织形式,数据文件被称为文本文件或二进制文件。

数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是进制文件。如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符形式存储的文件就是文本文件。

一个数据在内存中是怎么存储的呢?

字符一律以ASCII形式存储,数值型数据可以用ASCII形式存储,也可以使用二进制形式存储。

例如整数10000,如果以ASCII码形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而二进制形式输出则磁盘只占4个字节。

文本文件

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

二进制码文件

基于值编码,自己根据具体应用,指定某个值是什么意思,把内存中的数据按其在内存中的存储形式原样输出到磁盘上,一般需要自己判断或使用特定软件分析数据格式。

文件的三种缓存方式

行缓冲

标准io库函数,往标准输出(屏幕)输出东西的时候是行缓冲的,所谓的行缓冲就是缓冲区碰到换行符的时候才刷新缓冲区,如果不刷新缓冲区,将无法对文件执行读写操作

全缓冲

标准io库函数,往普通文件读写数据的时候,是全缓冲的。碰到换行符也不刷新缓冲区,即缓冲区满了,才刷新。

三种刷新缓冲区的情况:1. 缓冲区满了 、 2.人为的刷新缓冲区flush(文件指针)、3.程序正常结束会刷新缓冲区

无缓冲

在读写文件的时候通过系统调用io,对文件进行读写数据这个时候是无缓冲的,即数据会立马进入文件,读数据也会立马进入内存。

设置缓冲区作用

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

文件指针形式

定义文件指针的一般形式为:

FILE * 指针变量标识符;

体质上文件指针是一个结构体指针,结构体中包含了当前文件的很多信息,但是在实际编程时,不需要

关系结构体中的成员,只需要使用文件指针即可

FILE为大写,需要包含<stdio.h>

FILE是系统使用typedef定义出来的有关文件信息的一种结构体类型,结构中含有文件名、文件状态和文

件当前位置等信息一般情况下,我们操作文件前必须定义-一个文件指针标示我们将要操作的文件

实际编程中使用库函数操作文件,无需关心FILE结构体的细节,只需要将文件指针传给io库函数,库函

数再通过FILE结构体里的信息对文件进行操作

FILE在stdio.h文件中的文件类型声明:

struct _iobuf { 
    char *_ptr; 
    int _cnt; 
    char *_base; 
    int _flag; 
    int _file; 
    int _charbuf; 
    int _bufsiz; 
    char *_tmpfname;
};
typedef struct _iobuf FILE;

注:在缓冲文件系统中,每个被使用的文件都要在内存中开辟一块FILE类型的区域,存放与操作文件相关的信息

对文件操作的步骤

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

2、可以通过文件指针对文件进行读写等操作

3、读写等操作完毕后,要关闭文件,关闭文件后,就不能再通过此文件指针操作文件了

三个特殊的文件指针

c语言中有三个特殊的文件指针无需定义,在程序中可以直接使用

stdin: 标准输入 默认为当前终端 (键盘)

我们使用的scanf、getchar 函数默认从此终端获得数据

stdout: 标准输出默认为当前终端 (屏幕)

我们使用的printf、puts 函数默认输出信息到此终端

stderr: 标准错误输出设备文件默认为当前终端 (屏幕)

当我们程序出错使用:perror函数时信息打印在此终端

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值