文件描述符fd,分配到的是从0开始最小的没有被占用的。
2.输出重定向(重定向的本质,就是在操作系统内部更改fd对应的内容的指向),同时理解输入重定向和追加重定向。
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寻址方式对它进行管理。
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自动打包
15.使用静态库
(第1种方法,不建议使用,因为不能保证自己做的库的正确性,会污染官方的库)使用第三方库(不是操作系统的和语言提供的标准库),gcc编译时,加上指令 :-l库名(去头去尾)。
16.制作动态库
gcc -fPIC -c 文件.c -o 文件.o
gcc -shared 文件.o(…) -o lib….so
17.同时生成动态库和静态库
18.使用动态库
第1种方法和静态库的第1种方法一样,都不建议使用。