[转]linux创建链接文件的两种方法

转自 http://topic.csdn.net/u/20120930/11/3d9e5a0d-6dad-4dee-8a9d-6ad50f52f69e.html?r=79806698

 

一、 链接的分类:
链接分为软链接和硬链接:
  1> 软链接:
软链接又叫符号链接,这类文件包含了另外一个文件的路径。可以连接任意文件和目录,也可以连接不同的文件系统文件,也可以连接不存在的文件,还可以循环连接自己。
  2> 硬链接是一个已存在文件的另一个名字。注意:
  1)只能在同一个文件系统中的文件才能创建硬链接;
2)不允许给目录创建硬链接。
二、在shell界面使用ln命令创建链接
  当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例如:
  ln –s /bin/less /usr/local/bin/less,其中-s 是代号(symbolic)的意思。
如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件,用ls –l命令去察看,就可以看到显示的link的路径了。

这里有两点要注意:
1>ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
2>ln的链接又软链接和硬链接两种:
1)软链接创建指令:ln –s filename link_filename,意为创建一个名为“link_filename”指向 “filename”的链接文件,它只会在你选定的位置上生成一 个文件的镜像,类似windows下的快键方式。
2)硬链接创建指令:ln filename link_filename,没有参数-s, 它会在 你选定的位置上生成一个和源文件大小相同的文件。

无论是软链接还是硬链接,文件都保持同步变化。



指令参数详细说明:
  -f : 链结时先将与 dist 同档名的档案删除
  -d : 允许系统管理者硬链结自己的目录
  -i : 在删除与 dist 同档名的档案时先进行询问
  -n : 在进行软连结时,将 dist 视为一般的档案
  -s : 进行软链结(symbolic link)
  -v : 在连结之前显示其档名
  -b : 将在链结时会被覆写或删除的档案进行备份
  -S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
  -V METHOD : 指定备份的方式
  --help : 显示辅助说明
  --version : 显示版本


三、 C程序中使用link函数创建
link函数申明如下:
#include
int link (const char * oldpath, const char * newpath);
函数说明:link()以参数newpath 指定的名称来建立一个新的链接(硬链接)到参数oldpath 所指定的已存在文件. 如果参数newpath 指定的名称为一已存在的文件则不会建立链接。
返回值:成功则返回0, 失败返回-1, 错误原因存于errno。
错误代码:
 1、EXDEV 参数oldpath 与newpath 不是建立在同一文件系统.
 2、EPERM 参数oldpath 与newpath 所指的文件系统不支持硬连接
 3、EROFS 文件存在于只读文件系统内
 4、EFAULT 参数oldpath 或newpath 指针超出可存取内存空间.
 5、ENAMETOLLONG 参数oldpath 或newpath 太长
 6、ENOMEM 核心内存不足
 7、EEXIST 参数newpath 所指的文件名已存在.
 8、EMLINK 参数oldpath 所指的文件已达最大连接数目.
 9、ELOOP 参数pathname 有过多符号连接问题
 10、ENOSPC 文件系统的剩余空间不足.
 11、EIO I/O 存取错误.
 
范例:
 /* 建立/etc/passwd 的硬连接为pass */
 #include
 main()
 {
  link("/etc/passwd", "pass");
 } 

你可能感兴趣的:(linux学习)