标准I/O介绍

发布时间 2023-06-07 23:06:18作者: 一代枭雄

1. I/O概述

I/O:Input & Output,I/O操作是一切实现的基础,比如中间产生的一些数据,我们就可以利用I/O操作,将它们保存下来。如果没有I/O,那么我们就相当于什么数据都无法保存。

I/O的操作包括两个部分:

标准IO: stdio

系统调用IO: sysio,又称为文件IO

标准IO和系统调用IO如何进行区分:如果两个IO都可以使用,那么我们优先选择标准IO。因为标准IO移植性要好

标准IO是依赖于系统调用IO实现的

比如说fopen函数,在linux下面依赖于open函数;在windows环境下,依赖于openfile

open和openfile函数就是kernel提供出来的系统调用IO,而fopen函数就是标准IO,在哪个平台下利用fopen函数都能实现打开一个文件的作用,但它依赖的系统调用是不同的。

2. stdio

注意标准IO提供的函数都在man手册的第3章

打卡、关闭函数

fopen() : 

fclose():

对字符的读写函数

fgetc():

fputc():

对字符串的读写函数:

fgets()

fputs()

对数据块的的操作函数:

fread()

fwrite()

 

printf()

scanf()

 

文件位置指针的操作:

fseek();

ftell();

rewind();

 

合并系统调用,即起到buffer和cache的作用

fflush()

 

标准IO中有一个类型贯穿始终,该类型就是大写的FILE类型。

3.标准IO讲解

3.1 fopen

man fopen

path: 指定要打开的文件;

mode:指定打开的文件的权限,读写等等

返回值为FILE类型的指针,也就是结构体的起始位置。(因为FILE本身就是一个结构体类型)

errno是一个全局变量,你用我也用,如果现在出错了,我会把出错的原因放到errno这个全局变量上。换句话说,如果当前进行完某个操作,如果它出错了,它会把值放到errno上,此时作为程序员就需要马上打印errno的值,来进行查看错误出现的原因。如果没有及时的进行打印,继续做别的工作,那么errno也会记录其他的错误原因。这样就会出现这样的一个情况,errno如果没有及时的打印,它会被覆盖。

在最早的定义中,errno就是一个整型变量,例如errno-base.h中所展现的那样。但是现在已经不是这样了,errno已经被重构了,我们把它私有化之后,errno其实是一个宏了。