符号链接文件

简介: 符号链接文件

符号链接文件类似于 Windows 系统的快捷方式,只保留目标文件的地址,而不占用存储空间。使用符号链接文件和使用目标文件的效果是一样的,符号链接文件可以指定不同的访问权限,以控制对文件的共享和保证安全性。


Linux 中有两种类型的链接:软链接硬链接


硬链接

硬链接是利 用Linux 系统为每个文件分配的物理编号i节点建立链接(关于i节点,详见:文件的时间戳)。因此,硬链接不能跨域文件系统。硬链接的文件属性与源文件是基本一致的,二者可以同步更新。这种方式类似于 Windows 系统中将文件复制一份。


软链接

软链接是利用文件的路径名建立链接。通常建立软链接使用绝对路径而不是相对路径,以最大限度保证可移植性。软链接更像是 Windows创建快捷方式,软链接权限不会改变源文件(目标文件)的权限。


区别

硬链接和软链接的不同之处在于,源文件删除后,软链接无法定位到源文件,所以会显示没有文件;硬链接类似于赋值,删除源文件,硬链接依然可以访问。假如删除源文件后,重新创建一个同名文件,软链接将恢复;硬链接则不再有效,因为文件的i节点已经改变。


注意

修改链接的目标文件名,硬链接依然有效,软链接将断开。对一个已经存在的符号链接文件执行移动或删除操作,有可能导致链接的断开。


使用 link() 函数来创建硬链接,使用 unlink() 函数来移除硬链接。


语法:

#include <unistd.h>
int link(const char *oldpath, const char *newpath);点击复制复制失败已复制


参数 oldpath 提供的是一个已存在文件的路径名, link() 函数将以 newpath 参数所指定的路径名创建一个新链接。如果 newpath 指定的路径名已然存在,那么它不会被覆盖;相反,函数会产生一个错误( EEXIST )。在 Linux 中, link() 函数不会对符号链接进行解引用操作。如果 oldpath 属于符号链接,则会将 newpath 创建为指向相同符号链接文件的全新硬链接newpath 也是符号链接,指向 oldpath 所指向的同一文件)。


unlink() 函数用于移除一个链接(删除一个文件名),且如果此链接是指向文件的最后一个链接,那么还将移除文件本身。语法如下:

#include <unistd.h>
int unlink(const char *pathname);点击复制复制失败已复制


pathname 指定的文件的链接不存在,则 unlink() 函数调用失败, errno错误码)被置为 ENOENTunlink() 函数不会对符号链接进行解引用操作,若 pathname 为符号链接,则移除链接本身,而为链接指向的名称。


symlink() 函数用来创建软链接。语法如下:

#include <unistd.h>
int symlink(const char *oldpath, const char *newpath);点击复制复制失败已复制


针对 oldpath 所指定路径名创建一个新的符号链接 newpath (移除符号链接需要使用 unlink() 函数)。


newpath 中给定的路径已然存在,则调用失败( errno 置为 EEXIST )。由 oldpath 指定的路径名可以是绝对路径,也可以是相对路径。符号链接存储的内容是符号链接文件的路径。例如, /home/test 链接到 /home/test.txt ,符号链接 /home/txt 存储的内容就是 "/home/test.txt" 。这一点类似于指针,即指针变量保存的是数据的地址,通过指针就可以访问数据。


readlink() 函数则可以获取链接本身的内容,即其所指向的路径名。语法如下:

#include <unistd.h>
ssize_t readlink(const char *path, char *buf, size_t bufsiz);点击复制复制失败已复制


函数 bufsiz 是一个整型参数,用来指定参数 buf 中的可用字节数。如果成功, readlink() 函数将返回实际放入 buf 中的字节数。若链接长度超过 buf ,则置于 buf 中的是经截断处理的字符串。因为 buf 尾部并未放置终止字符,因此无法分辨 readlink() 函数所返回的字符串到底是经过了截断处理,还是恰巧将 buf 填满。验证的方法之一是重新分配一块更大的 buf ,并再次调用 readlink() 函数。

目录
相关文章
|
搜索推荐 Unix Linux
深入了解ln命令:创建硬链接和符号链接的实用指南
深入了解ln命令:创建硬链接和符号链接的实用指南
305 0
5-14|如何生成软链接
5-14|如何生成软链接
|
6月前
|
存储 Windows
windows系统的符号链接和硬链接的区别
【5月更文挑战第27天】windows系统的符号链接和硬链接的区别
140 0
|
6月前
|
Linux Windows
文件属性和路径
文件属性和路径
软链接
软链接
95 0
|
算法 Linux Windows
硬链接和软链接有什么区别
硬链接和软链接有什么区别
119 0