随笔分类 - Linux
【Linux】Linux下的硬链接与符号链接
摘要:Linux的初学者常常混淆Linux中的硬链接(hard link)与符号链接(symbol link)的概念,分不清楚它们的区别。因此,本文将向读者全面介绍硬链接与符号链接,给予读者以全面的认识。1.Linux下的文件系统 1.1 Ext2文件系统结构 为了能够从本质上理解硬链接与符号链接,我们必须要对Linux下的文件系统有一定的认识。这一小节将向读者简要地介绍Linux下的文件系统(以Ext2文件系统为例)知识作为背景。 Ext文件系统是对minix文件系统的扩展,而Ext2文件系统是第二代扩展文件系统。磁盘分区大小可达4TB,磁盘布局采用了组块。 上图是Ext2文件系统结构示...
阅读全文
Linux操作系统中文件结构stat中st_size的说明以及对于文件中洞(Holes)的理解
摘要:文件stat结构体中st_size成员 对于所有的文件类型,st_size成员对其中的普通文件、目录以及符号链接有实在的意义。其中,对于普通文件而言,st_size记录了该文件的实际大小;对于目录而言,st_size的值为16或者512的倍数;对于符号链接而言,st_size的值为符号链接所指的路径的长度。例如lib->usr/lib,则st_size的值即为7。 在某些Unix系统中,st_size的值对pipe等文件也有意义,表示当前pipe中可以读取的字节数。Holes产生的原因 当我们使用lseek函数,在超出文件的原文件尾的某个位置处开始写入字节时,为了节省磁盘空间,它们之间未
阅读全文
【Linux】GNU C库 accept函数的逐层下调的研究
摘要:在我们写的socket程序中,一般都会使用网络套接字API,比如send()、accept()、receive()等函数,那么这些函数在Linux操作系统中是如何实现的呢?我们将通过分析代码对其进行深入的研究。本文中所使用的Glibc库版本为2.0.111,Linux内核版本为Linux 1.2.13。1.用户层代码 在程序中我们使用了accept()函数,这个函数的实现是在Glibc库,即GNU的C库中实现的。具体代码是:1 //glibc-2.0.111\sysdeps\unix\sysv\linux\accept.S2 #define socket accept3 #defi...
阅读全文