任何一个文件可以有多个目录项指向其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. jsScript中的一些操作方法

    1.采用dom方式对script标签进行操作 var h = document.getElementsByTagName('HEAD').item(0); var s = document.creat ...

  2. 第3章 抽象工厂模式(Abstract Factory)

    原文 第3章 抽象工厂模式(Abstract Factory) 场景我们的系统要同时支持两个数据库  SqlServer 跟Oracle数据库  并且不同的环境要进行随时切换. 看下面的代码: 1 2 ...

  3. 自定义View视图

    自定义View视图文件查找逻辑 之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对IViewEngine接口的FindPartialView或FindView方法进行重写 ...

  4. spring4.2完整web项目(使用html视图解析器)

    完整配置springmvc4,最终视图选择的是html,非静态文件. 最近自己配置spring的时候,遇到很多问题,由于开发环境和版本的变化导致网友们给出的建议很多还是不能用的,可能还会有很多人会遇到 ...

  5. java_Eclipse中SVN的安装步骤(两种)和使用方法

    若是只要site地址: http://subclipse.tigris.org/update_1.6.x,  下边可以忽略 一.给Eclipse安装SVN,最常见的有两种方式:手动方式和使用安装向导方 ...

  6. Linux开发环境的搭建和使用——Linux本必备软件SSH

    SSH 至 Secure Shell 缩写.由 IETF 网络工作组(Network Working Group)开发:SSH 以建立应用层和传输层安全协议中的基础上. SSH 是眼下较可靠,专为远程 ...

  7. [CLR via C#]5.1 基元类型

    原文:[CLR via C#]5.1 基元类型 某些数据类在开发中非常常用,以至于许多编译器允许代码已简化的语法来操作它们.例如可以使用以下语法来分配一个整数: System.Int32 a = ne ...

  8. .net的自定义JS控件,运用了 面向对象的思想 封装 了 控件(.net自定义控件开发的第一天)

    大家好!我叫刘晶,很高兴你能看到我分享的文章!希望能对你有帮助! 首先我们来看下几个例子 ,就能看到 如何 自定义控件! 业务需求: 制作  一个   属于 自己的    按钮 对象    ,然后 像 ...

  9. vim插件管理器vundle

    安装:  git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle set nocompatible " be i ...

  10. iframe的各项參数

    iframe的各项參数: <iframe src="test.jsp" width="100″ height="50″ frameborder=" ...