待续
内核为每个进程维护一个文件打开记录表,文件描述符为该文件在表中的索引值。
采用引用计数方式访问文件,当引用计数器为零时,内存管理机制便会对其进行垃圾回收。
对于以下选中的情况,引用计数器会自加1:
一个文件包括三项,目录项(dentry结构)、索引节点(inode结构)和文件数据。
当对该文件建立硬链接(ln src src_ln
)时,会额外创建dentry结构和inode结构,但两者的节点号一样(节点号可认为是文件数据的地址);而当建立符号链接(ln -sfn src src_ln
)时,则是额外创建了一个文本文件,里面包含了源文件的位置信息。两者完全不同,也不能抽象地比较优劣,只能就具体情况来说。
-ldl
;ar cr libtest.a test1.o test2.o
,编译成动态库的命令为g++ -fPIC -shared -o libtest.so test1.o test2.o
。因为c不支持函数重载(即与c++函数签名方式不同),所以在c/c++混合编程时,须用extern “c” {}将c代码封装。
在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件、占用的内存等,但是仍然为其保留一定的信息(包括进程号,退出状态,运行时间等), 只有父进程通过wait/waitpid来取时才释放,否则其进程号就会一定被占用,这样就导致了僵尸进程的问题。