【C语言总结】C语言输入/输出函数

这篇博客详细介绍了C语言中的输入/输出函数,包括错误报告、终止执行、标准库I/O函数库、ANSI I/O概念以及流I/O等核心内容。文章通过实例讲解了如何使用fopen、fclose、fread、fwrite等函数进行文件操作,并阐述了缓冲I/O、文本流和二进制流的区别。此外,还讨论了流错误处理、文件操纵函数和临时文件的创建。
摘要由CSDN通过智能技术生成

1.错误报告

perror函数以一种简单、统一的方式报告错误

ANSI C 函数库的许多函数调用操作系统来完成某些任务,I/O函数就是如此,当操作系统执行任务的时候,不论任何时候都具有失败的可能性。

所以标准库函数在一个外部整型变量变量errno中保存错误代码之后把这个信息传递给用户程序,提示操作失败的准确原因。

perror函数简化向用户报告这些特定错误的过程,它的原型定义于stdio.h,如下:

void perror( const char* message);

如果message表示NULL并且指向一个非空的字符串,perror函数就打印出这个字符串,后面跟一个分号和一个空格,然后打印出一条用于解释errno当前错误代码的信息

提示:perror最大的优点就是 容易使用。良好的编程实践要求任何可能产生错误的操作都应该在执行之后检查,确定是否成功执行。即使看上去十拿九稳的也要检查,因为它们迟早可能失败。

2.终止执行

还有一个exit函数,它用于终止一个程序的执行,它的原型定义于stdlib.h,如下所示:

void exit(int status);

status参数返回给操作系统,用于提示程序是否正常完成。预定义符号EXIT_SUCCESS和 EXIT_FAILURE分别提示 程序的终止是成功还是失败。

这个函数经常在调用perror之后再调用它终止程序,注意这个函数没有返回值,当exit函数结束时,程序已经消失。

3.标准库I/O函数库

标准I/O函数库具有一组I/O函数,这个函数库对现存的函数进行了扩展,例如为printf函数提供了不同的版本,可以适用于许多场合。

函数库同时引进了缓冲I/O的概念,提高了绝大多数程序的效率。

ANSI C库函数中的I/O函数是旧式标准I/O库函数的直接后代。再设计ANSI函数库时,可移植性和完整性是两个关键的考虑内容,这些函数是对原本的函数进行诸多完善之后的结果,但是它们仍然可以进一步改进。

ANSI C的一个主要优点就是这些修改将通过增加不同的函数的方式实现,而不是通过对现存函数进行修改来实现,因此程序的可移植性不会受到影响。

4.ANSI I/O 概念

头文件stdio.h包含了与ANSI函数库的I/O部分有关的声明

4.1流

ANSI C进一步对I/O的概念进行了抽象,就C程序而言,所有的I/O操作只是简单的从程序移进或者移出字节的事情。这种字节流便被称为流。

绝大多数流是完全缓冲的,这意味着“读取”和”写入“实际上是从一块被称为缓冲区(buffer)的内存区域来回复制数据,用于输出流的缓冲区只有当它写满时才会被刷新(flush,物理写入)到设备或文件中。

使用标准输入个输出时,这种缓冲可能会引起混淆,所以只有当操作系统可以断定它们与交互设备无联系时才会进行完全缓冲。

一个常见(但是不普遍)的策略是把标准输入和标准输出联系再一起,就是当请求输入时同时刷新输出缓冲区,这样在用户必须进行输入之前,提示用户进行输入的信息和以前写入到输出缓冲区中的内容将出现在屏幕上。

一、文本流
流分为两种类型,文本流和二进制流,文本(text)流的特性在不同的系统中可能不同。

二、二进制流

二进制流中的字节将完全根据程序编写它们的形式写入到文件或设备中,而且完全根据它们从文件或设备读取的形式读入到程序中。这种类型的流适用于非文本数据。

4.2文件

stdio.h所包含的声明之一就是FILE结构,FILE是一个数据结构,用于访问一个流。如果你同时激活了几个流,每个流都有一个合适的相应的FILE与它关联。

对于每个ANSI C程序运行时必须提供至少三个流——标准输入、标准输出和标准错误。这些流的名字分别是stdin、stdout和stderr,他们都是一个指向FILE结构的指针。标准输入是缺省情况下输入的来源,标准输出是缺省的输出设置,标准错误就是错误信息写入的地方,perror函数也把它的输出写到这个地方。

5.流I/O总览

下面是关于文件I/O的一般概况。

1.程序为必须同时处于活动状态的每个文件声明一个指针变量,其类型为FILE*。这个指针指向这个FILE结构,当它处于活动状态时由流使用。

2.流通过fopen函数打开,为了打开一个流,必须指定需要访问的文件或设备以及他们的访问方式(例如:读,写或既读又写)。fopen函数和操作系统验证文件或设备确实存在,并初始化FILE结构。

3.然后根据需要对该文件进行读取或写入

4.最后,调用fclose函数关闭流,关闭一个流可以防止与它相关联的文件再次被访问,保证在存储于缓冲区的数据被正确的写到文件中并且释放FILE结构使它可以用于另外 的文件。

标准流的I/O更简单,因为它们不需要打开或者关闭。

I/O函数以三种基本的形式处理数据,单个字符、文本行和二进制数据。对于每种形式都有一组特定的函数对他们进行处理。

下图是执字符、文本行和二进制I/O的函数:

这里写图片描述

1.只用于stdin或stdout

2.随作为参数的流使用

3.使用内存中的字符串而不是流

需要一个流的参数的函数将接受stdin或stdout作为它的函数。

下表示每个家族的函数:

这里写图片描述

①对指针使用下标引用或间接访问操作从内存获得一个字符(或向内存写入一个字符)
②使用strcpy函数从内存中读取文本行(或向内存中写入文本行)

6.打开流

fopen函数打开一个特定的文件,并把一个流和这个文件相关联,它的原型如下所示:

FILE* fopen(const char* name, const chat* mode);

两个参数都是字符串,name是你希望打开的文件或设备的名字,创建文件名的规则在不同的系统中可能不相同,所以fopen把文件名作为一个字符串而不是作为路径名、驱动器字母、文件扩展名等各准备一个函数。

这个参数指定要打开的文件——FILE*变量的名字是程序用来保存fopen的返回值的。mode(模式)参数提示流是用于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值