1. Linux 文件IO 理解: IO 是input与output的缩写,对于文件IO,我的理解是通过一系列接口去准备输入文件内容并达到自己想要的输出结果。
Linux系统下一切皆文件。
2.Linux下的文件分类:
(1) 普通文件: 储存一些内容数据的文件,类似window下的txt(储存文字内容), PTT(储存图片内容)等
(2) 目录文件: 类似window下的文件夹,但是与window下的文件夹有着本质的区别。
: window的文件夹下是实实在在能够储存文件的。直观体现在window文件夹 的大小会随着其文件,而Linux系统下的文件目录项不会随着文件的增加而增大,Linux下的文件目录项类似于一张表,里面储存文件相关信息,用户访问文件并不是在文件目录下面访问文件,而是通过它找到文件相应的储存位置进行访问。
验证:
:下图中文件大小远远超过4096
:对应的文件目录只有4096
(3) 链接文件: 类似于window下的桌面快捷方式
(4) 管道文件:进程通信的特殊文件。也成为命名管道FIFO
(5) 套接字文件: 网络通信的特殊文件。
(6)字符设备文件和块设备文件:字符设备和块设备的硬件在应用层上提供的接口。
3.几种IO:
(1)系统IO:由系统提供的操作文件的函数接口。特点是简洁,功能单一,但是没有设置缓冲区(可以自己设置),对海量数据的处理效率很低,一般不建议使用。(但套接字和设备文件之恶能通过系统IO访问)
(2)标准IO:由C库提供的函数接口,功能多样复杂,把很多流程一体化。并且有提供缓冲区,对海量数据处理效率更高。
缓冲区作用举例:类比发快递,没有缓冲区是收到一件发一件,效率低,而有缓冲区相当于等待十件或者更多的快递送到后在一次发送,效率更高。
系统IO与标准IO功能多样性的区别:类比买菜,系统IO对此是提供走到菜市场接口,买菜接口,付款接口,回家接口 这些零散的功能。而标准IO支持一步到位,只提供一个买菜接口就可实现功能。
(3)库文件:库移植和动态链接库
(4)目录操作:如何读取目录
(3),(4) 同样属于文件IO的学习内容。
4.操作文件流程:
(1)确定文件存在。(创建文件)
(2)打开文件。(open())
(3)操作文件。(write() or read())
(4)关闭并保存文件。(一般调用一个close()即可)
5.如何查看函数的使用—man手册
man -f 函数名
:出现带有相关函数的手册号。不同的手册号带有不同的含义。
9本man手册可以通过$man man指令查询
1 – commands(普通的命令)(类似 ls,cd等命令)
2 – system calls(系统调用) (包括系统IO接口)
3 – library calls(库函数)
4 – special files(特殊文件:/dev下设备文件)
5 – file formats and convertions(文件格式)
6 – games for linux(游戏和娱乐)
7 – macro packages and conventions(杂项)
8 – system management commands(管理员命令)
9 – 其他(Linux特定, 用来存放内核例行程序的文档)
man 手册具体内容的解释,以 $man 2 open为例(第二本man手册下的open函数解释)
第一部分:解释相关函数的名字,以及一些函数声明与对应头文件。
第二部分:解释每个函数的大概功能是什么样子的。
第三部分:解释一些具体参数的定义(注意区分不同函数的参数)
第四部分:介绍了函数的返回值,以及对应的错误信息。
我认为最关键的在于看懂函数声明(第一部分)和函数功能的解释(第二部分),其余可忽略。出现bug时则要查看一下函数的错误信息。