C语言的默认流,文件流

目录

前言

什么是流,流的一些概念

C语言默认会打开的流

文件操作的输入输出流


前言

在初学C语言之处,在学习一些函数的时候常常会出现 stream , stdin , stdout 等字眼。

getc , putchar等函数。先看下面两个函数的使用。


---(从流(stream)中读取一个字符,或者从标准输入(stdin)中获取一个字符)


--- 将字符写入流(stream)或标准输出(stdout)。

还有很多的函数出现了很多的关于流,标准输入输出的概念,虽然不太懂但是不影响我们使用这些库函数。那么到底什么是流呢?


什么是流,流的一些概念

        在写一个C语言程序的时候,未来可能要将写好的数据输出到各种外部设备上(如屏幕,文件, 网络,硬盘,软盘,打印机...)。但是把这些数据输出到不同的设备上,需要的方法,协议可能都不相同。

        所以,在写一个C语言程序的时候,为了方便编程人员,所以抽象出了一个流(stream)的概念。我们写的程序只要输入到流里就可以了,就不用再关心如何输出到外部设备。流如何输出数据到外部设备会由C语言所设计好,我们就不需要在关心了。

        流 由 FILE* 指针来管理,是 FILE 的结构,前言中也可知 int getc(FILE* stream);


C语言默认会打开的流

任何一个C语言程序运行的时候,会默认打开3个流,其类型都是 FILE*

stdin     -------     标准输入  \rightarrow 对应的其实就是 键盘

stdout   -------     标准输出 \rightarrow 对应的其实就是 屏幕

stderr    -------     标准错误 \rightarrow 对应的也是 屏幕

平时我们在使用 scanf, printf 的时候,都有用到流。

scanf \rightarrow Read formatted data from the standard input stream. 从标准输入流中读取数据

printf \rightarrow Print formatted output to the standard output stream. 打印数据到标准输出流中

C语言运行的时候,这三个标准输入输出流都是会默认打开的,所以我们可以直接使用 scanf 等函数。


文件操作的输入输出流

C语言运行起来会默认打开三个标准流,但是如果想要操作文件,就必须需要文件的流。C 语言程序运行起来不会随便打开某一个文件。        所以在操作文件的时候,首先要打开文件,拥有了这个文件的流,才能对流所对应的文件,进行数据的写或者读操作。

        如下代码就是用 fopen 函数打开了当前文件夹下 test.txt(相对路径,也可以写成绝对路径(D:\test\test.txt)) 文件。

FILE* pf = fopen("test.txt", "w");

这样就获得了 pf 这个流,就可以对这个文件进行进行文件操作了。

可以这样理解。  pf stdin 是一样的,都是 FILE* 类型的指针,只不过

pf 维护 test.txt 文件(一个指定的文件)

stdin 维护 键盘输入流

下面是文件函数以及其适用的输出或者输入流:

功能
函数名
适用于
字符输入函数
fgetc
所有输入流
字符输出函数
fputc
所有输出流
文本行输入函数
fgets
所有输入流
文本行输出函数
fputs
所有输出流
格式化输入函数
fscanf
所有输入流
格式化输出函数
fprintf
所有输出流
二进制输入
fread
文件
二进制输出
fwrite
文件

适用于所有输入流/输出流 的函数可以适用于标准输入输出流(stdin/stdout/stderr),也能适用于文件流。也就是说适用于所有输入/输出流的文件可以从文件中读,也可以从键盘上读取数据;可以输出到文件,也可以输出到屏幕。

//适用于标准输入输出流  从键盘读取,屏幕输出
int main()
{
    int ch = fgetc(stdin); //fgetc 从 stdin 流中读取一个字符
    fputc(ch, stdout); //fputc 将一个字符输出到 stdout 流中
    return 0;
}

//适用于文件流 从文件中读取,打印到文件中
int main()
{
    FILE* pf = fopen("test.txt", "r+"); //读写模式 文件中已经有数据

	//读文件
	int ch = fgetc(pf); // fgetc 从 pf 流中读取一个字符
	printf("%c\n", ch);

    //写文件
    fputc('a', pf); //fputc 将字符a写到 pf 流中

	//关闭文件
	fclose(pf);
	pf = NULL;
    return 0;
}

而二进制输入输出函数只能适用于文件流,只能针对文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值