linux系统下提供ln指令来进行文件链接。文件链接主要分为硬链接和软链接。
硬链接:由于linux下的文件是通过索引节点(Inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配inode。每添加一个一个硬链接,文件的链接数就加1。
可以用:ln命令来建立硬链接。语法:
- ln [options] existingfile newfile
- ln[options] existingfile-list directory
软链接(符号链接):
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
- $ln –s file1 file1soft
程序执行:
link()函数和symlink()
unlink("/opt/ipnc");
sprintf(cSrc,"/opt/ipnc%d",iDirNum); sprintf(cDst,"/opt/ipnc"); symlink(cSrc, cDst);原型:
#include <unistd.h> int symlink( const char * oldpath , const char * newpath); ssize_t readlink( const char * path , char * buf , size_t bufsiz);
说明:symlink() 函数创建称为 newpath 的符号链接,该符号链接指向称为 oldpath 的文件。符号链接可以跨越文件系统,并且不会对执行对 oldpath 是否存在的任何检查。一旦创建符号链接,就可以用 readlink() 函数来读取它的内容,以查看它指向何处。readlink() 函数允许我们确定为 path 的符号链接指向什么内容。路径名的第一个 bufsiz 字节复制到用户提供的缓冲区 buf。当路径名复制到 buf 时,它没有按照我们期望的那样以 NULL 终止,因此必须添加自己的终止标记。示例代码:
#include <unistd.h> #include <stdio.h> int main() { char buf [ 128 ]; if ( symlink ( "/home/Programming/system/symlink.c" , "/home/groad/symlink_test.c") == - 1) perror ( "symlink"); readlink ( "/home/groad/symlink_test.c" , buf , 127); buf [ 128 ] = '\0'; printf ( "%s \n " , buf); return ( 0); }
运行与输出:
./symlink /home/Programming/system/symlink.c
之间的区别:
硬链接就是备份,软连接就是快捷方式
http://blog.csdn.net/hairetz/article/details/4168296
http://blog.csdn.net/stilling2006/article/category/746887