IO编程
标准IO
1.
标准
IO
是由库函数系统提供的,由
ANSI C
标准定义
2.
是带缓冲区的操作,运行效率较高
3.
支持跨平台的
4.
标准
IO
操作的依据一般是流指针
全缓冲:
缓冲区满了才刷新缓冲区,或者强制刷新缓冲区
行缓冲:
碰到换行符刷新缓冲区、缓冲区满了刷新、或者强制刷新缓冲区
不缓冲:
所有的信息到缓冲区之后直接到文件
相关函数
fopen
函数功能:打开由参数
1
描述的文件,打开的方式由参数
2
确定
函数参数
1
:需要被打开的文件的路径
函数参数
2
:打开的方式
r :
以只读的形式打开文件,文件存在则打开,不存在则报错
r+ :
以读、写的形式打开文件,文件存在则打开,不存在则报错
w :
以只写的形式打开文件,文件存在则清空打开,文件不存在则新建
w+ :
以读、写的形式打开文件,文件存在则清空打开,文件不存在则新建
a :
以追加的形式打开文件,文件存在则追加,文件不存在则新建
a+ :
以可读可写(追加)的形式打开文件,文件存在则追加,文件不存在则新建
函数返回值:成功返回:文件流指针
失败返回
NULL
,并且更新
errno
fgetc
函数功能:从
stream
指示的文件中读取字符
函数参数:需要读字符的文件流
函数返回值:成功返回读到的字符可以是(
EOF
,表示读完了),失败返回
-1
fputc
函数功能:给
stream
写了一个字符
c
函数参数
1
:被写的字符
函数参数
2
:给谁写
函数返回值:成功返回写入的字符,失败返回
-1
fgets
函数功能:按行读
函数参数
1
:读到哪
函数参数
2
:读多少(实际读到的是
size-1
,最后一个空间给
\0
预留) 所以
fgets
相较于
gets
是安全的
函数参数
3
:从哪读
函数返回值:成功返回非
0
,返回
NULL
的时候是出错或者没有可读的字符了
fputs
函数功能:给文件写
函数参数
1
:从哪写
函数参数
2
:给谁写
函数返回值:成功返回非负整数,失败返回
fread:
函数功能:读
函数参数
1
:读到哪
函数参数
2
:一次读多少
函数参数
3
:总共读多少次数
函数参数
4
:从哪读
函数返回值:成功返回成功读或写的成员的个数,失败返回
0
fwrite
函数功能:写
函数参数
1
:从哪写
函数参数
2
:一次写读多少
函数参数
3
:总共写多少次
函数参数
4
:往哪写
函数返回值:成功返回成功读或写的成员的个数,失败返回
0
fprintf
函数功能:往指定的流里面输出东西
函数参数
1
:指定的流
函数参数
2……
:同
printf
fscanf
函数功能:从指定的流里面获取信息
函数参数
1
:指定的流
函数参数
2……
:同
scanf
fclose
函数功能:关闭由参数
stream
指示的流
函数参数:需要被关闭的流
函数返回值:成功返回
0
,失败返回
-1
并且设置errno
fflsh
函数功能:强制刷新由参数
1
指定的流
函数参数如果为
NULL
,则会刷新所有已打开的输出流
函数返回值:成功返回
0
,失败返回
-1
并且更新
errno
feof
判断文件是否到末尾
fseek
函数功能:给指定的流从参数
3
描述的位置移动参数
2
个大小的位置
参数
1
:给谁移动光标
参数
2
:移动多少
参数
3
:从那开始:
SEEK_SET
从文件开头移动
SEEK_CUR
从文件当前光标指向的位置开始移动
SEEK_END
从文件末尾开始移动
返回值:
成功返回
0
,失败返回
-1
并且更新
errno
ftell
函数功能:计算由参数
stream
指示的流当前光标处在的位置
函数参数:指定的文件流
函数返回值:成功返回当前处在的位置,失败返回
-1
,并更新
errno
fileno
函数功能:获取文件流指针里面的文件描述符
文件IO
1.
文件
IO
是由操作系统提供的,由
POSIX
(可移植操作系统接口)定义
2.
没有缓冲区,运行效率没有标准
IO
高
3.
不支持跨平台的
4.
文件
IO
操作的依据一般是文件描述符(非负整数)
相关函数
open
函数功能:打开文件
函数参数
1
:需要打开的文件路径
函数参数
2
:打开的方式
必须包含如下的其中一个
O_RDONLY :
只读
O_WRONLY :
只写
O_RDWR :
可读可写
还可以有以下的:
O_APPEND:
以追加的形式打开
O_CREAT :
文件存在则打开,不存在则按照
mode
参数描述的权限创建一个普通文件
函数参数
3
:如果文件存在则打开,不存在则按照此参数描述的创建一个普通文件
函数返回值:成功返回文件描述符(非负的最小整数)
file description fd
失败返回
-1
,并且更新
errno
read
函数功能:从
fd
描述的文件中读取
count
个字节的数据给
buf
开始的空间
函数参数
1
:从哪读
函数参数
2
:读到哪
函数参数
3
:读多少
函数返回值:成功返回实际上读到的数目,失败返回
-1
,并且更新
errno
write
函数功能:把数据从
buf
指示的空间里面写道
fd
里,写了
count
个
函数参数
1
:往哪写
函数参数
2
:从哪写
函数参数
3
:写多少
函数返回值:成功返回写入的个数,失败返回
-1
并且更新
errno
close
函数功能:关闭文件
函数参数:需要关闭的文件的文件描述符
函数返回值:成功返回0,失败返回-1并且更新errno
动态库与静态库
制作动态库
制作静态库
数据结构
线性结构
顺序存储
定义:
typedef struct list
{
data_type data[SIZE]; //struct student arr[];//存储空间
int count; //用来指示当前存储多少元素了
}List;
typedef struct list
{
data_type (*data)[]; //指向数组的指针 数组:顺序表的存储空间
int size; //当前顺序表有多大的空间
int count; //用来指示当前存储了多少元素 表满:count == size
}List;
特点:
1.
逻辑上相邻的元素,在物理空间上也相邻
===
》空间连续
2.
大小固定
3.
表满不能存,表空不能取
链式存储
定义
插入
删除
栈
定义
//定义大小
#define SIZE (10)
栈的定义:
//定义数据类型
typedef int data_type;
//顺序表的定义
typedef struct list
{
data_type data[SIZE]; //存储空间
int count; //指示元素的个数
}List;
//栈的定义
typedef struct stack
{
data_type data[SIZE]; //存储空间
//只能在栈顶进行操作
int top; //指示栈顶
}Stack;
入栈和出栈
队列
定义
typedef struct queue
{
data_type data[SIZE]; //存储空间
//在队尾插入、队头删除
int tail; //指示队尾
int head; //指示队头
}Queue;
入队和出队
树状结构
网状结构
分类:
按有无方向可以分为:有向图、无向图
按是否带权值:带权图和不带权图
网状结构的顺序存储
网状结构的链式存储
有向图:十字链表法
无向图:多重链表
算法