对《Unix/Linux系统编程》中关于inode文件索引节点,软硬链接,stat系统调用进行了总结
其中关于inode部分内容转载自网络链接
参考资料
1. 系统调用
在Linux操作系统中,进程以两种模式运行:内核模式和用户模式。在用户模式中进程的权限非常有限,不能执行任何需要特殊权限的操作,而这些需要特殊权限的操作只能在内核模式中执行。系统调用使得进程能够进入内核模式执行用户模式下不能执行的操作,如复刻子进程,修改执行映像,打开文件等操作。
系统调用必须由程序发出,用法与普通函数一样。每个系统调用函数都会汇集系统调用参数,并向操作系统内核发出一个系统调用:
int syscall(int number, ...);
syscall()
执行一个系统调用,第一个参数是系统调用编号,后面的参数是对应内核函数的参数。
系统调用可让进程从用户模式切换到内核模式,内核的系统调用处理程序根据系统调用编号number将调用路由到一个相应的内核函数。当进程结束执行内核函数后会返回到用户模式并得到所需结果;如果失败,错误编号会记录在errno
中,可以通过strerror
获取错误对应的描述字符串。成功返回>=0,失败返回-1。
在Linux中系统调用函数说明放在man 2中。可以通过man 2 系统调用名称
来查阅(例如可以查阅这些系统调用函数所需头文件,参数说明,返回值说明等)
2. inode
在 Linux 中 inode
号(即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
2.1 inode是什么
文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector
)。每个扇区储存512字节
(相当于0.5KB)
操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block
)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB
,即连续八个sector组成一个block。
文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的“元信息”,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做*inode*,中文译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息,如文件数据block的位置、blocks块数、文件内容上一次变更时间等等。。。可以说ÿ