linux环境编程基础

阅读量 ,评论量

内核

待续

文件描述符

内核为每个进程维护一个文件打开记录表,文件描述符为该文件在表中的索引值。

文件

采用引用计数方式访问文件,当引用计数器为零时,内存管理机制便会对其进行垃圾回收。

对于以下选中的情况,引用计数器会自加1:

一个文件包括三项,目录项(dentry结构)、索引节点(inode结构)和文件数据。

  1. 目录项包括文件名和指向索引节点的指针等信息(当用unlink函数删除该项时,便在该目录中看不见该文件);
  2. 索引节点包括链接数、文件所有者、文件在磁盘的位置等文件属性;
  3. 文件数据便是在磁盘上的数据块。

当对该文件建立硬链接(ln src src_ln)时,会额外创建dentry结构和inode结构,但两者的节点号一样(节点号可认为是文件数据的地址);而当建立符号链接(ln -sfn src src_ln)时,则是额外创建了一个文本文件,里面包含了源文件的位置信息。两者完全不同,也不能抽象地比较优劣,只能就具体情况来说。

文件系统

因为c不支持函数重载(即与c++函数签名方式不同),所以在c/c++混合编程时,须用extern “c” {}将c代码封装。

僵尸进程

在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件、占用的内存等,但是仍然为其保留一定的信息(包括进程号,退出状态,运行时间等), 只有父进程通过wait/waitpid来取时才释放,否则其进程号就会一定被占用,这样就导致了僵尸进程的问题。