Linux14.文件(下)

文件描述符fd,分配到的是从0开始最小的没有被占用的。

2.输出重定向(重定向的本质,就是在操作系统内部更改fd对应的内容的指向),同时理解输入重定向和追加重定向。

db93d216b2f34bb0ba5f1d4174db4efa.jpg

3.重定向函数dup2(oldfd, newfd),oldfd -> newfd (小技巧:一般情况前面一个参数大,后面一个参数小(0,1,2))。

4.Linux一切皆文件,使用面向对象的方法,每一种硬件创建一个结构体(函数使用函数指针),所以在操作系统看来,对硬件的操作变成了对文件的操作。

5.缓冲期,一般而言显示器是行缓冲,磁盘文件是全缓冲,用户缓冲区是由语言维护的,不是操作系统维护的。

C语言标准库提供的文件操作函数(fprintf,fputs…)会写入缓冲区,等缓冲区满了之后才会发生写时拷贝写进内核缓冲期。操作系统提供的接口(write)会写入内核缓冲区,如果同时用这些函数,注意文件中内容的上下顺序(write函数写入的东西在最上面, C语言提供的函数写入的东西在下面)。

6.函数syncfs(fd)将数据写进外设。

7../a.out > ok.txt 2>err.txt :以上指令,使用重定向,把标准输出和标准错误分开写入两个不同的文件。

如果想把所有的输出都写进一个文件里,使用以下指令 :./a.out > log.txt 2>&1

8.磁盘使用CHS寻址方式,每个扇区的大小是512字节。将它抽象成一个巨大的数组,操作系统使用LBA寻址方式对它进行管理。

62cf39c56e9f4aaa8414521f70e5f207.jpg

 7b43c6951b4f482e9fc167c519b54ba2.png

d15fb7347b124644b8e29d75c7efa295.png

9.操作系统和文件进行交互的基本单位是4KB。理解inode和文件名的关系。

10.ln -s 文件A 文件B :建立软链接,文件B指向文件A。

11.ln 文件A 文件B :建立硬链接。

12.软链接有独立的inode(是独立文件),硬链接则没有(不是独立文件)。软链接相当于一个快捷方式,硬链接是建立了文件名和inode的映射关系(起别名,其意义类似于c++中的智能指针)。

13.unlink指令相当于删除。

14.静态库制作

ar -c lib….a *.o :将所有.obj文件打包成静态库(其中…为名字,可以任意起)。

使用Makefile自动打包

4ca5638e6b22482e9af054ca57b2bee8.png

15.使用静态库

20591d36f35441239e12099a4804a25a.png

(第1种方法,不建议使用,因为不能保证自己做的库的正确性,会污染官方的库)使用第三方库(不是操作系统的和语言提供的标准库),gcc编译时,加上指令 :-l库名(去头去尾)。

16.制作动态库

gcc -fPIC -c 文件.c -o 文件.o

gcc -shared 文件.o(…) -o lib….so

17.同时生成动态库和静态库

1b7c4b2ecc5d4dfdbde173a3d3ecfade.png

18.使用动态库

第1种方法和静态库的第1种方法一样,都不建议使用。

34978175dc8645ad8cfc641b45e48276.jpg

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>