链接文件
Linux的文件系统会把磁盘分区成主要的两大部分
-
inode信息块
-
默认128B,里面主要记录文件的权限、大小、所有者、修改时间等基本信息
-
-
block数据块
-
默认4Kb,记录了文件名和真正的文件数据内容
-
-
每个文件必须拥有一个唯一的inode以及若干个block组成,读取文件需要借助文件所在目录的block中记录的文件inode号,找到该文件的inode,inode中记录了该文件的block位置,从而最终读取文件
什么是软、硬链接文件?
硬链接文件
-
硬链接文件没有自己inode和block,只是在不同的目录下复制了一份源文件的inode信息,可以通过该inode找到同一份源文件的block
软链接文件
-
软链接文件会创建自己的新的inode和block,它的inode也是为了找到自己的block,而在它的block中存储的是链接源文件的文件名和inode信息
区别
-
删除源文件,只是删除源文件的inode块,但是硬链接文件不受影响,而软链接文件就无法访问了
-
当一个文件的硬链接数删除成0时,文件才被真正的删除
-
修改硬链接文件内容,源文件也会被修改;而修改软链接的block,不会改变源文件的内容,反而会让软链接无法找到源文件
-
硬链接不能链接目录,软链接可以
硬链接文件的创建和删除:
int link(const char *oldpath, const char *newpath); 功能:创建硬链接文件 与命令 link \ ln 功能一样 int unlink(const char *pathname); 功能:删除文件的硬链接,文件的硬链接数-1 int remove(const char *pathname); 功能:与unlink一致,都可以删除普通文件以及硬链接文件 注意:如果删除的文件正在被打开,则会等待文件关闭后删除 注意:如果删除的是软链接文件,则会只删除软链接文件本身,而不会对源文件有任何影响,而且没有任何一个可以借助软链接来删除链接对象文件的函数
软链接文件的创建与读取:
int symlink(const char *target, const char *linkpath); 功能:创建软链接文件 对应命令:ln -s ssize_t readlink(const char *pathname, char *buf, size_t bufsiz); 功能:获取到软链接文件自身的block内容,也就是它链接对象的文件名,而不会获取到链接对象的文件内容 如果想要读取链接对象的文件内容,还是通过read\write进行标签:文件,char,操作系统,源文件,inode,链接,block From: https://blog.csdn.net/zzt_is_me/article/details/140999042