文件的分类
d:目录文件-:普通文件c:字符设备文件b:块设备文件l:链接文件p:管道文件s:套接字文件
按存储类型来分
文本文件:存储的是ASCII码(0~127),以EOF End Of File (-1)作为结束符。
一般存储数据量比较大的信息,读取的速度慢
二进制文件:是数据在内存上的原样存储,存储的是二进制的形式。
一般存储中间变量,数据量比较小的信息,读取的速度快
按操作方式来分
带缓冲区的操作:(标准IO)高级的文件操作,系统会自动的在内存上给我们分配缓冲区。
不带缓冲区的操作:(文件IO)低级的文件操作,系统是不会自动的给我们的程序分配空间,但是如果需要缓冲区的机制,缓冲区就得自己定义了。

标准IO和文件IO
区别
标准IO:1.标准IO是由库函数系统提供的,由ANSI C标准定义2.是带缓冲区的操作,运行效率较高3.支持跨平台的4.标准IO操作的依据一般是流指针文件IO:1.文件IO是由操作系统提供的,由POSIX(可移植操作系统接口)定义2.没有缓冲区,运行效率没有标准IO高3.不支持跨平台的4.文件IO操作的依据一般是文件描述符(非负整数)
系统调用和库函数
系统调用:操作系统提供给用户直接操作硬件的一组接口
库函数:对系统调用的二次封装
系统调用和库函数的区别
1.系统调用一般提供基础的功能,库函数提供较为复杂的功能2.系统调用一般不能重写,库函数可以重写3.系统调用运行的时间属于机器时间,库函数运行时间属于用户时间4.系统调用运行空间属于内核空间,库函数运行空间属于用户空间5.系统调用的返回值一般是非负整数,库函数的返回值不一定6.系统调用的运行效率没有库函数的高7.系统调用的移植性没库函数的好
文件描述符和流指针
文件流指针
文件描述符
是一个非负整数,本质是什么?
本质是数组下标

标准IO
缓冲区的方式
全缓冲
缓冲区满了才刷新缓冲区,或者强制刷新缓冲区

行缓冲
碰到换行符刷新缓冲区、缓冲区满了刷新、或者强制刷新缓冲区

不缓冲
所有的信息到缓冲区之后直接到文件

对文件进行操作
打开文件
函数功能:打开由参数1描述的文件,打开的方式由参数2确定函数参数1:需要被打开的文件的路径函数参数2:打开的方式r : 以只读的形式打开文件,文件存在则打开,不存在则报错r+ : 以读、写的形式打开文件,文件存在则打开,不存在则报错w : 以只写的形式打开文件,文件存在则清空打开,文件不存在则新建w+ : 以读、写的形式打开文件,文件存在则清空打开,文件不存在则新建a : 以追加的形式打开文件,文件存在则追加,文件不存在则新建a+ : 以可读可写(追加)的形式打开文件,文件存在则追加,文件不存在则新建函数返回值:成功返回:文件流指针失败返回NULL,并且更新errno
操作文件
以字符读写
函数功能:从stream指示的文件中读取字符函数参数:需要读字符的文件流函数返回值:成功返回读到的字符可以是(EOF,表示读完了),失败返回-1
函数功能:给stream写了一个字符c函数参数1:被写的字符函数参数2:给谁写函数返回值:成功返回写入的字符,失败返回-1
模拟cat命令
以行读写
函数功能:按行读函数参数1:读到哪函数参数2:读多少(实际读到的是size-1,最后一个空间给\0预留) 所以fgets相较于gets是安全的函数参数3:从哪读函数返回值:成功返回非0,返回NULL的时候是出错或者没有可读的字符了
判断一个文件有多少行
以对象读写
以格式化读写
关闭文件
main函数传参
标准IO相关函数
文件IO
打开文件
操作文件
关闭文件
对目录文件的操作
打开目录
操作目录
stat
关闭目录
动态库、静态库
区别
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库,因此体积较大。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动
态库存在,因此代码体积较小。
静态库
静态库对函数库的链接是放在编译时期(compile time)完成的。程序在运行时与函数库再无瓜葛,移植方便浪费空间和资源,因为所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。---》编译时把静态库中的相关代码复制到可执行程序中优点:程序运行时,无需加载库,运行速度更快缺点:占用更多磁盘和内存空间,静态库升级后,需要重新编译链接
动态库
动态库把对一些库函数的链接载入推迟到程序运行的时期(runtime)。可以实现进程之间的资源共享。将一些程序升级变得简单。甚至可以真正做到链接载入完全由程序员在程序代码中控制。----》编译时仅记录用到哪个共享库中的哪个符号,不复制共享库中的相关代码优点:程序不包含库中代码,体积比较小,库升级方便,无需重新编译缺点:在运行需要加载共享库
制作动态库