--linux文件操作
文件IO操作包括:
(注:I:input(输入)O:output(输出))
open:打开
close:关闭
read:读取
write:写入
lseek:定位
(文件IO都是基于俩个设备进行的)
-文件描述符
程序运行后,操作系统默认打开三个文件,分别是:
标准输入 描述符:0 对应设备一般为键盘
标准输出 描述符:1 对应设备一般为显示屏
标准错误输出 描述符:2 对应设备一般为显示屏
-linux标准IO
-标准IO和文件IO
标准IO是另外一套IO接口,具有如下特点:
1. 标准IO是属于跨平台,可以在linux,windows,mac os上运行,文件IO只能在linux平台运行
2. 标准IO自带缓冲区,有更高的IO效率
3. 标准IO提供丰富的操作文本信息的接口
但是,标准IO底层需要依赖于文件IO,标准IO是属于glibc库的一部分
-流与FILE对象
流的概念
流:流(stream)是一串连续不断的传输的数据的集合,就像水管里的水流,在水管的一端一点一点的供水,而在水管的另一端看到的是一股连续不断的水流
流的分类
文本流与二进制流
标准IO的缓冲区
stdout的缓冲区属于行缓冲
stderr的缓冲区属于不缓冲
stdin的缓冲区属于全缓冲
缓冲区强制刷新
程序在结束时,会自动刷新缓冲区,当程序未结束时,想强制刷新缓冲区,则需要调用fflush()函数
-获取系统时间
在linux中获取主要需要以下俩个步骤:
1.通过time()函数获取从1970至今的秒数
2.通过localtime()函数或者ctime()函数
-库原理与制作
程序在编译时分为多个阶段:
1.预处理
处理所有预处理命名,包括宏定义,条件编译指令,文件包含指令
2.编译
进行词法分析、语法分析,语义分析后,将.i文件编译为汇编文件(.s)
3.汇编
将汇编指令翻译为机器指令,也就是二进制,形成目标文件(.o)
4.链接
将多个目标文件进行链接,得到一个程序最后的执行文件
-静态库
函数库:函数库是实现某一类功能的若干个函数的集合
静态库:静态库时函数库二进制文件的一种形式,在Windows与Linux下对应的文件格式:
Windows: xxx.lib
Linux:lib xxx.a
特点:
1.程序体积较大,当编译器链接静态库的时候,会将库函数接口实现代码拷贝到可执行文件中
2.方便移植,运行程序不需要库的存在,因为程序中已经包含了库函数的实现代码(但是,库函数发生任何改变,都需要重新编译程序)
-相关命令
ar -rc libmath.a add.o sub.o :用于将目标文件打包为静态库
-r(replace) :若静态库文件中的目标文件有所更新,则用新的目标文件替换旧的目标文件
-c(create) :建立静态库文件
-t :列出静态库中的文件
-v :显示详细的信息
-动态库
动态库的特点:
1.动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入,因此在程序运行时还需要动态库存在;
2.动态库只有在程序执行时, 那些需要的函数代码才被拷贝到内存中。这样就使可执行文件比较小, 节省磁盘空间;
3.由于运行时要去链接库会花费一定的时间,执行速度相对会慢一些;
4.动态库是牺牲了时间效率,换取了空间效率