符号链接和硬链接的区别符号链接和硬链接的区别
(1)创建一个硬链接
可以使用命令ln或者函数link()为文件创建一个链接 。
#include unistd.h
int link( const char *path1, const char *path2 );
硬链接本身就是一个目录项 , (比如文件名+索引节点号) , 可以将文件名与文件的位置关联起来;符号
链接也称软链接,是指存储了一个字符串的文件 。这个字符串可以在路径名解析的过程中,用于修改路径名 。
目录项对应于单个链接,但是一个索引节点可能有几个链接的目标(对应几个目录项),因此索引节点中包含一个对链接到索引节点的链接数的计数 。当用open()创建一个新的文件时,操作系统就会创建一个新的目录项 , 并分配一个空闲的索引节点来表示该文件 。不能够对目录创建符号链接,不能够跨越文件系统创建硬链接 。
硬链接只是建立一个目录项(包括inode号和文件名),这个目录项的inode号和被链接文件的inode号相同,我们建立1.src文件的硬链接过后,发现1.hard的inode号与1.src的inode号是相同的,
(2) 创建一个符号链接
使用ln命令带选项-s 或者函数symlink(),都可以创建符号链接 。
#include unistd.h
int symlink ( const char *path1, const char *path2);
符号链接是一个包含了另一个文件或目录名字的文件 。引用符号链接的名字会使操作系统去定位对应于那个链接的索引节点 , 知道最终遇到一个硬间接和一个真正的文件为止 。如果过了一段时间,系统没有找到文件,则放弃并返回ELOOP错误 。
符号链接,将建立一个文件 , 所以要占用一个inode节点,在这个inode节点中,存放了指向被链接文件的路径字符串 , 当建立1.src文件的符号链接后,1.sym的inode号和1.src是不一样的,1.sym的索引节点中存放了1.src的路径,通过这个路径就可以找到存放文件的索引节点 。
当将符号链接指向的文件删除时,符号链接将无法使用 , 因为符号链接是通过路径名去找到被链接文件的,而硬链接通过增加被链接文件索引节点计数来达到链接目的,所以即使被链接文件删除了,硬链接仍然可以正常的使用 , 1.sym是1.src的符号链接,1.hard是1.src的硬链接,当1.src被删除过后,访问1.sym出现错误,因为此时系统想通过路径去访问1.src,而1.src已经被删除了 。但是由于硬链接是直接通过增加inode的引用计数,所以源文件被删除过后,仍然可以正确的访问 。
在线等 。。。C语言,在linux下运行,关于符号链接运行这个程序的命令应该是 ./aaa file1 file2 file3
其中file1 file2 file3是分别对应于argv[1]argv[2]argv[3]的3个参数,都是文件的名字 。
其中file1是要建立连接的原始文件(你机器中原有的一个文件),file2是建立的连接文件,file3是从file2复制得到的文件 。
运行后应该得到一个连接文件file2 和它的拷贝文件 file3.
另外建议在main函数中声明readlink函数 。并且编译时加上Wall选项 。对初学者有好处 。
fatal error C1083: Cannot open include file: 'SDL/SDL.h': No such file or directory 怎么办啊接和符号链接函数
函数link
调用语法:
link (newlink, file);
创建现有文件的链接--硬链接,file是被链接的文件,newlink是被创建的链接.
成功返回真,失败返回假.
当删除这两个链接中的一个时,还可以用另一个来访问该文件.
函数symlink
调用语法:
symlink (newlink, file);
创建现有文件的符号链接,参数和返回值同上.
当原文件被删除(如:被unlinke函数删除),则被创建链接不可用.
推荐阅读
- 软件开发net方向课程关系,软件开发net和java
- redis存储数据位置,redis存储在哪
- 高分模拟经营类手游游戏,2020模拟经营类游戏推荐
- mysql怎么修字段名 mysql 改字段名
- 新媒体运营如何度过试用期,新媒体运营试用期工作总结模板
- linux的发送文件命令,linux发送文件夹到另一台机器
- 电子宠物养成类游戏,电子宠物狗游戏
- go语言数组和指针 go语言数组和指针的区别
- 王者什么连招最厉害视频,王者荣耀连招技巧攻略汇总