《小菜狗 C 语言入门 + 进阶笔记》目录:《小菜狗 C 语言入门 + 进阶笔记》(0)简介
1、文件是什么?
文件是数据源的一种,最主要的作用是保存数据。比如常见的 Word 文档、txt 文件、源文件等。
**C 语言具有操作文件的能力:**比如打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件等。
文件是存储在计算机存储设备(如硬盘、闪存等)上的⼀组数据,可以持久保存。文件可以分为文本文件和⼆进制文件两种类型。
- 文本文件:由字符组成,可以使用文本编辑器打开查看和编辑。
- ⼆进制文件:以字节为单位存储,存储的是⼆进制的信息,不便于直接查看和编辑。
2、流是什么?
我们程序中产⽣的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念。
C 程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。
C 语言具有操作流的能力: 我们要想向流里写数据,或者从流中读取数据,都是要打开流,然后操作,最后关闭流。
在 C 语⾔中,流通常使用标准库中的 stdio.h 库中的流处理函数来操作。
C 语⾔中的流可以分为输入流和输出流两种类型。
- 输入流(Input Stream):用于从外部获取数据,常见的输入流包括
标准输入流 stdin 和文件输入流。 - 输出流(Output Stream):用于将数据发送到外部,常见的输出流包括
标准输出流 stdout 和文件输出流。
3、输入输出
输入输出(Input output,IO)是指程序(内存)与外部设备(键盘、显示器、磁盘、其他计算机等)进行交互的操作。几乎所有的程序都有输入与输出操作,如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等。通过输入和输出操作可以从外界接收信息,或者是把信息传递给外界。
4、标准流
为什么我们从键盘输入数据,向屏幕上输出数据,并没有打开流呢?
那是因为 C 语⾔程序在启动的时候,默认打开了 3 个流:
- stdin - 标准输入流,在大多数的环境中从键盘输入,scanf 函数就是从标准输入流中读取数据。
- stdout - 标准输出流,大多数的环境中输出⾄显⽰器界面,printf 函数就是将信息输出到标准输出流中。
- stderr - 标准错误流,大多数环境中输出到显⽰器界面。
这是默认打开了这三个流,我们使用 scanf、printf 等函数就可以直接进行输入输出操作的。
- 通常把显示器称为标准输出文件,printf 就是向这个文件输出数据;
- 通常把键盘称为标准输入文件,scanf 就是从这个文件读取数据。
| 文件 | 硬件设备 |
|---|---|
| stdin | 标准输入文件,一般指键盘;scanf()、getchar() 等函数默认从 stdin 获取输入。 |
| stdout | 标准输出文件,一般指显示器;printf()、putchar() 等函数默认向 stdout 输出数据。 |
| stderr | 标准错误文件,一般指显示器;perror() 等函数默认向 stderr 输出数据(后续会讲到)。 |
| stdprn | 标准打印文件,一般指打印机。 |
回忆一下如何使用标准输入流和标准输出流进行数据的输入输出:
#include <stdio.h>
int main()
{
int num;
printf("请输入⼀个数字:"); // 输出到标准输出流
scanf("%d", &num); // 从标准输入流获取数据
printf("你输入的是:%d\n", num); // 输出到标准输出流
return 0;
}
5、文件指针与文件信息区
stdin、stdout、stderr 三个流的类型是: FILE * ,通常称为文件指针。
C 语⾔中,就是通过 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;
不同的 C 编译器的 FILE 类型包含的内容不完全相同,但是大同小异。
每当打开⼀个文件的时候,系统会根据文件的情况自动创建⼀个 FILE 结构的变量,并填充其中的信息,使用者不必关心细节。
⼀般都是通过⼀个 FILE 的指针来维护这个 FILE 结构的变量,这样使用起来更加方便。
6、文件指针定义
我们创建⼀个 FILE* 的指针变量:
FILE* pf;//文件指针变量
pf 是⼀个指向 FILE 类型数据的指针变量。
可以使 pf 指向某个文件的文件信息区(是⼀个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够间接找到与它关联的文件。
如下图所示:

《小菜狗 C 语言入门 + 进阶笔记》目录:《小菜狗 C 语言入门 + 进阶笔记》(0)简介
每日一更!
公众号、优快云等博客:小菜狗编程笔记
谢谢点赞关注哈!目前在飞书持续优化更新~
日更较慢有需要完整笔记请私我,C/C++/数据结构-算法/单片机51-STM32-GD32-ESP32/嵌入式/Linux操作系统/uboot/Linux内核-驱动-应用/硬件入门-PCB-layout/Python/后期小程序和机器学习!

被折叠的 条评论
为什么被折叠?



