任何一个文件可以有多个目录项指向其i节点。创建一个向现存文件连接的方法是使用l i n k函数。
#include <unistd.h>
int link(const char * e x i s t i n g p a t h, const char * n e w p a t h) ;
返回:若成功则为0,若出错则为-1
此函数创建一个新目录项n e w p a t h,它引用现存文件e x i s t i n g p a t h。如若n e w p a t h已经存在,则返回出错。

这是Apue上关于link函数的介绍,看到这里我并没有在意上面的第一句话,直到下面这个函数出现:
s y m l i n k函数创建一个符号连接。
#include <unistd.h>
int symlink(const char * a c t u a l p a t h, const char * s y m p a t h) ;
返回:若成功则为0,若出错则为-1
该函数创建了一个指向a c t u a l p a t h的新目录项s y m p a t h,在创建此符号连接时,并不要求a c t u a l p a t h已经存在,并且,a c t u a l p a t h和s y m p a t h并不需要位于同一文件系统中。
这两个函数有什么不同?大神们没事儿闲的,不会是写重了吧?其实不同点很容易看出来,但要真正理解缘由,要涉及到linux下的硬链接和软链接(也就是所谓的符号链接)概念!
符号链接是对一个文件的间接指针,相当于windows下的快捷方式。它与硬链接有所不同,硬连接直接指向文件的i节点。这是个很有趣的区别,用ln命令为文件建立的硬链接等同于原文件,而ln -s建立的符号链接,确是另外的一种文件类型——符号链接(symbolic link)。啰嗦了半天,有什么了不起,不就是不同文件类型嘛!那尝尝这个小问题:用open函数打开符合链接文件,结果会如何?符号链接本身的内容又是什么?该怎样读取它?
大神们这回又闲了,居然整出如下函数:
#include <unistd.h>
int readlink(const char * p a t h n a m e, char *b u f, int b u f s i z e) ;
返回:若成功则为读的字节数,若出错则为-1
此函数组合了open, read和c l o s e的所有操作。
看了如下这张表你就明白了:
各个函数对符号连接的处理

Function

Does not follow symbolic link

Follows symbolic link

access

 

chdir

 

chmod

 

chown

creat

 

exec

 

lchown

 

link

 

lstat

 

open

 

opendir

 

pathconf

 

readlink

 

remove

 

rename

 

stat

 

truncate

 

unlink

 
对于不同的文件类型,采用不同的功能函数,这包括对目录文件的处理!在linux的世界里,函数的误用,是个常见的错误。从原理上理解这些函数和基础概念,才能紧绷这根弦儿!

由link()和symlink()谈到软链接与硬链接的更多相关文章

  1. linux命令大全之ln命令详解(创建软链接和硬链接)

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接,分为软链接.硬链接.软链接相当于windows的快捷方式,下面是使用方法和示例   ln是linux中又一 ...

  2. linux中软链接和硬链接的区别与小结

    ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链 ...

  3. Linux软链接和硬链接

    Linux中的链接有两种方式,软链接和硬链接.本文试图清晰彻底的解释Linux中软链接和硬链接文件的区别. 1.Linux链接文件 1)软链接文件  软链接又叫符号链接,这个文件包含了另一个文件的路径 ...

  4. Linux 软链接和硬链接的理解与学习

    理解前提: 首先要知道 Linux任意一个文件包含2个信息:第一个信息就是文件本身存的内容,第二个信息是文件的控制信息(读写,路径,大小等等),这2个信息是分开存储的,明白这点非常重要 理解总结: L ...

  5. 转: linux文件链接(软链接和硬链接)

    链接:一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法. Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic l ...

  6. 理解inode 以及 软链接和硬链接概念区分

    inode简单理解 本文来源自网络文章,并针对文章内容加以批注和修改.希望能帮到你! 一. 磁盘设备 说到inode,首先必须要提及下<操作系统>中磁盘存储器的管理一节.磁盘设备是一种相当 ...

  7. Windows和Linux创建软链接和硬链接

    1.Wondows创建软链接和硬链接 mklink [/d] [/h] link target /d--创建目录软链接:默认为文件软链接:创建目录链接时必须使用该选项不然创出的软链接无效 /h--创建 ...

  8. linux下软链接与硬链接及其区别

    linux下创建链接命令 ln -s 软链接 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s, 具体用法是:ln ...

  9. Linux中的链接文件_软链接和硬链接

    一.链接文件介绍 Linux操作系统中的“链接文件”分为硬链接(hard link)和软链接(symbolic link).两种链接的本质区别在于inode.以下是详细介绍: 硬链接:当系统要读取一个 ...

随机推荐

  1. iOS ... NS_REQUIRES_NIL_TERMINATION

    看到官方的一个样例不错,这里留记. #import <Cocoa/Cocoa.h> @interface NSMutableArray (variadicMethodExample) - ...

  2. Nyoj 一笔画问题(图论)

    描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画.   输入 第一行只有一个正整数N(N&l ...

  3. Swift中文教程(四)--函数与闭包

    原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: fu ...

  4. Android[安德鲁斯] 文本Air Video 远程播放电脑视频

    苹果iOS下列.目前应用Air Video,能力iOS由Wifi远程直接播放电脑视频,无需看视频复制到手机.非常好用!最近使用Android打电话.展望类别似应用,找了很长一段时间没有找到.在仔细的思 ...

  5. C++中避免内存泄露常见的解决方式

    常见内存泄露及解决方式-选自ood启发录 new/delete, array new/arrray delete匹配 case 1: 在类的构造函数与析构函数中没有匹配地调用 new/delete! ...

  6. MVC使用Bootstrap

    ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers 摘要: 序言ASP.NET MVC允许开发者创建自定义的HTML Helper ...

  7. jquery 调用wcf 的SOA架构,将三层架构运用到SOA的架构中来(第四天)

    经过前面3天的学习,我想大家应该对SOA的架构有了初步的了解,其实 SOA与三层架构并不冲突,而是三层架构的升级版. 来看下传统的三层架构! 一共可以分为4个层: 模型层(可有可无),客户端,服务端, ...

  8. Asp.net实现URL重写

    原文:Asp.net实现URL重写 [概述] URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程.重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读 ...

  9. nginx跳转

    语法规则: location [=|~|~*|^~] /uri/ { - } = 开头表示精确匹配   ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径就可以.nginx不正确url做 ...

  10. C--指针数组

    一个变量有一个地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,他们都有相应的地址,所谓数组的指针是指数组的其实地址,数组元素的指针是数组元素的地址. 一个数组是有连续的一块内存单元组成 ...