1.IO的分类:
标准
IO和
文件
IO。
2.按操作方式来分:
带缓冲区的操作:(标准
IO
)高级的文件操作,系统会自动的在内存上给我们分配缓冲区。
不带缓冲区的操作:(文件
IO
)低级的文件操作,系统是不会自动的给我们的程序分配空间,但是如果需要缓冲区的机制,缓冲区就得自己定义了。
3.标准IO和文件IO的区别:
标准
IO:
1.
标准
IO
是由库函数系统提供的,由
ANSI C
标准定义
2.
是带缓冲区的操作,运行效率较高
3.
支持跨平台的
4.
标准
IO
操作的依据一般是流指针
文件
IO:
1.
文件
IO
是由操作系统提供的,由
POSIX
(可移植操作系统接口)定义
2.
没有缓冲区,运行效率没有标准
IO
高
3.
不支持跨平台的
4.
文件
IO
操作的依据一般是文件描述符(非负整数)
1.标准IO
1.标准IO缓冲区的方式:
1.全缓冲:
缓冲区满了才刷新缓冲区,或者强制刷新缓冲区。
2.行缓冲:
碰到换行符刷新缓冲区、缓冲区满了刷新、或者强制刷新缓冲区。
3.不缓冲:
所有的信息到缓冲区之后直接到文件 。
2.标准IO对文件进行操作:
1.打开文件:
fopen
:
函数功能:打开由参数
1
描述的文件,打开的方式由参数
2
确定
函数参数
1
:需要被打开的文件的路径
函数参数
2
:打开的方式
r :
以只读的形式打开文件,文件存在则打开,不存在则报错
r+ :
以读、写的形式打开文件,文件存在则打开,不存在则报错
w :
以只写的形式打开文件,文件存在则清空打开,文件不存在则新建
w+ :
以读、写的形式打开文件,文件存在则清空打开,文件不存在则新建
a :
以追加的形式打开文件,文件存在则追加,文件不存在则新建
a+ :
以可读可写(追加)的形式打开文件,文件存在则追加,文件不存在则新建
函数返回值:成功返回:文件流指针
失败返回
NULL
,并且更新
errno
2.操作文件:
1.以字符读写:
fputc:
函数功能:给stream写了一个字符c
函数参数1:被写的字符
函数参数2:给谁写
函数返回值:成功返回写入的字符,失败返回-1
fgetc:
函数功能:从stream指示的文件中读取字符
函数参数:需要读字符的文件流
函数返回值:成功返回读到的字符可以是(EOF,表示读完了),失败返回-1
2.以行读写:
fgets:
函数功能:按行读
函数参数
1
:读到哪
函数参数
2
:读多少(实际读到的是
size-1
,最后一个空间给
\0
预留) 所以
fgets
相较于
gets
是安全的
函数参数
3
:从哪读
函数返回值:成功返回非
0
,返回
NULL
的时候是出错或者没有可读的字符了
fputs
函数功能:给文件写
函数参数
1
:从哪写
函数参数
2
:给谁写
函数返回值:成功返回非负整数,失败返回
-1
3.以对象读写:
fread:
函数功能:读
函数参数
1
:读到哪
函数参数
2
:一次读多少
函数参数
3
:总共读多少次数
函数参数
4
:从哪读
函数返回值:成功返回成功读或写的成员的个数,失败返回0
fwrite:
函数功能:写
函数参数
1
:从哪写
函数参数
2
:一次写读多少
函数参数
3
:总共写多少次
函数参数
4
:往哪写
函数返回值:成功返回成功读或写的成员的个数,失败返回
0
4.以格式化读写:
fscanf:
函数功能:从指定的流里面获取信息
函数参数
1
:指定的流
函数参数
2……
:同
scanf
fprintf :
函数功能:往指定的流里面输出东西
函数参数
1
:指定的流
函数参数
2……
:同
printf
5.关闭文件:
fclose:
函数功能:关闭由参数
stream
指示的流
函数参数:需要被关闭的流
函数返回值:成功返回
0
,失败返回
-1
并且设置
errno
6.标准IO相关函数:
fflsh
:
函数功能:强制刷新由参数
1
指定的流
函数参数如果为
NULL
,则会刷新所有已打开的输出流
函数返回值:成功返回
0
,失败返回
-1
并且更新
errno
feof:
判断文件是否到末尾
time
函数:
函数功能:返回一个从计算机元年到现在的秒数(
1970-1-1 0:0:0
)
函数参数:如果参数不为
NULL
,返回值也可以传址调用的形式返回
函数返回值:成功返回到现在的秒数,失败返回
-1
,并且更新
errno
localtime()
函数功能:获取本地时间
函数参数:秒数
函数返回值:指向年月日结构体的指针
光标移动:
fseek();
函数功能:给指定的流从参数
3
描述的位置移动参数
2
个大小的位置
参数
1
:给谁移动光标
参数
2
:移动多少
参数
3
:从那开始:
SEEK_SET
从文件开头移动
SEEK_CUR
从文件当前光标指向的位置开始移动
SEEK_END
从文件末尾开始移动
返回值:
成功返回
0
,失败返回
-1
并且更新
errno
获取光标位置:
ftell();
函数功能:计算由参数
stream
指示的流当前光标处在的位置
函数参数:指定的文件流
函数返回值:成功返回当前处在的位置,失败返回
-1
,并更新
errno
fileno:
函数功能:获取文件流指针里面的文件描述符
2.文件IO:
1.打开文件:
第二个
open
函数
函数功能:打开文件
函数参数
1
:需要打开的文件路径
函数参数
2
:打开的方式
必须包含如下的其中一个
O_RDONLY :
只读
O_WRONLY :
只写
O_RDWR :
可读可写
还可以有以下的:
O_APPEND:
以追加的形式打开
O_CREAT :
文件存在则打开,不存在则按照
mode
参数描述的权限创建一个普通文件
函数参数
3
:如果文件存在则打开,不存在则按照此参数描述的创建一个普通文件
函数返回值:成功返回文件描述符(非负的最小整数)
file description fd
失败返回
-1
,并且更新
errno
2.操作文件:
1.read:
函数功能:从
fd
描述的文件中读取
count
个字节的数据给
buf
开始的空间
函数参数
1
:从哪读
函数参数
2
:读到哪
函数参数
3
:读多少
函数返回值:成功返回实际上读到的数目,失败返回
-1
,并且更新
errno
2.write :
函数功能:把数据从
buf
指示的空间里面写道
fd
里,写了
count
个
函数参数
1
:往哪写
函数参数
2
:从哪写
函数参数
3
:写多少
函数返回值:成功返回写入的个数,失败返回
-1
并且更新
errno
3.关闭文件:
close:
函数功能:关闭文件
函数参数:需要关闭的文件的文件描述符
函数返回值:成功返回
0
,失败返回
-1
并且更新
errno