符号链接是指向一个文件的间接指针。他与上一节所诉的硬链接不同。硬链接直接指向文件的i节点。引入符号链接的原因是为了避开硬链接的一些限制。

  • 硬链接通常要求链接和文件位于同一文件系统中。
  • 只有超级用户才能创建指向目录的硬链接。

对符号链接以及他指向何种对象并无任何文件系统限制。任何用户都可以创建指向目录的符号链接。符号链接一般用于将一个文件或这个目录结构移动到系统中的另一个位置。

 

当使用以名字引用文件的函数的时候,应当了解该函数是否处理符号链接。也就是该函数是否跟随符号链接到达它锁链节的文件。如若该函数具有处理符号链接的功能,则其路径名参数引用由符号链接指向的文件。否则路径名参数将引用链接本身。而不是该链接指向的文件。下表列出了本章中所说明的各个函数是否处理符号链接。

 

函数

不跟随符号链接 跟随符号链接
access
       *
chdir
       *
chmod
       *
chown        *        *
creat
       *
exec
       *
lchown        *
link
       *
lstat        *
open
       *
opendir
       *
pathconf
       *
readlink        *
remove        *
rename        *
stat
       *
truncate
       *
unlink        *
上表没有列出mkdir,mkinfo,mknod和rmdir这些函数。其原因是当路径名是符号链接的时候,他们都出现错误返回。以文件描述符作为参数的一些函数也未在该表中列出。原因是,对富豪链接的处理是由返回文件描述符的函数同事是open进行的。chown是否跟随符号链接取决于实现。
上表中一个例外是,同时用O_CREAT和O_EXCL两者调用open函数。在此情况下,若路径名引用符号链接,open函数将出错返回。并将errno设置成EEXIST..这种处理方式的意图是阻塞一个安全性漏洞。使其具有特权的进程不会被诱骗对不适合的文件进行写操作。
实例:
使用符号链接可能在文件系统中引入循环。大多数查找路径名的函数在这种情况下发生时都将返回值为ELOOP和errno。
[cpp] view plaincopy
  1. [devis@gdmss unix_pro]$ mkdir foo  
  2. [devis@gdmss unix_pro]$ touch foo/a  
  3. [devis@gdmss unix_pro]$ ln -s ../foo foo/testdir   
  4. [devis@gdmss unix_pro]$ ls -l foo  
[cpp] view plaincopy
  1. 总计 0  
  2. -rw-rw-r-- 1 devis devis 0 10-24 22:03 a  
  3. lrwxrwxrwx 1 devis devis 6 10-24 22:03 testdir -> ../foo  


这创建了一个目录foo,它包含了一个一个名为a的恩见以及一个指向foo的符号链接。

在下图显示了这个结果,图中 以圆表示目录,以正方形表示文件

 

 从图中,我们可以看到foo到testdir是一个循环。这样的一个循环很容易消除。因为unlink并不跟随符号链接,所以可以unlink文件foo/testdir,但是如果创建一个构成这种循环的硬链接,那么就很难消除它。这就是为什么link函数burn徐构造指向目录的硬链接的原因。

 

用open函数打开文件的时候如果传递给open函数的路径名制定了一个符号链接,那么open跟随此链接达到你所指定的文件。若此符号链接所指向的文件并不存在。则open返回出错。表示不能打开该文件。这可能会使不熟悉符号练级的用户感到迷惑。如下例子

linux系统会提示这两个文件,myfile文件存在但cat后却称没有这一个文件。其原因是某与file

是一个符号链接。但该链接所指向的文件不存在。ls命令-l选型给我们提示。->前为符号链接。之后为文件。也可以是使用-F选项。

《UNIX环境高级编程》--符号链接相关推荐

  1. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  2. 《Unix环境高级编程》学习笔记:从点到面

    以前在课堂上学习过<Unix初级教程(第四版)>,对于Unix有了一点了解.由于以后使用的需要,要对它进行比较深入的学习,为此需要阅读不少的书籍,这本<Unix环境高级编程>便 ...

  3. 文件和目录(二)--unix环境高级编程读书笔记

    在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...

  4. Unix环境高级编程 笔记

    Unix环境高级编程(第二版)学习笔记 这是一次较长时间的整理,然而跳跃了一些章节和很多知识点,仍然是很不完善很不全面的. 前言 操作系统某些问题 严格意义上,可将操作系统定义为一种软件,它控制计算机 ...

  5. 《UNIX环境高级编程(第3版)》

    <UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison ...

  6. unix环境高级编程(上)-文件篇

    目录 前言 unix基础知识 unix标准化和实现 unix提供的文件IO 文件和目录 标准IO 系统数据文件 前言 笔者将<unix环境高级编程>主要内容总结为三篇:文件篇,进程篇,高级 ...

  7. 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)

    文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...

  8. 《Unix环境高级编程》---标准IO

    一.基础结构 1.文件 FILE FILE是标准IO用来表示文件的结构体,所有标准IO都以FILE为基础. stdin FILE类型的指针,指向标准输入流. stdout FILE类型的指针,指向标准 ...

  9. 《UNIX环境高级编程(第3版)》——1.7 出错处理

    本节书摘来自异步社区<UNIX环境高级编程(第3版)>一书中的第1章,第1.7节,作者:[美]W. Richard Stevens , Stephen A.Rago著,更多章节内容可以访问 ...

  10. unix环境高级编程 pdf_UNIX系统编程宝典,每一本都值得程序员珍藏

    这几本UNIX系统编程宝典,重印无数次,几代程序员都视如珍宝的几本书,小编在出版圈里快十年了,见证了这本书图灵版.异步社区版的出版.营销,对这套书倾注了一定的感情.今天继续分享给你们,好书总会有人还不 ...

最新文章

  1. 保护您的IE浏览器安全
  2. 基于摄像头使用Cascade Classifier做人脸检测的方法及例程
  3. [Ljava.lang.String和java.lang.String区别
  4. Node工程-构建优秀的Session机制
  5. loadrunner 关联匹配多个值
  6. Linux平台常用命令
  7. 第三篇:POSIX标准中的 “ 限制 ”
  8. Windows学习总结(11)——Windows批处理命令编写代码及小程序简介
  9. linux http用户,HTTP完整请求过程
  10. 四种依恋类型_【工具】成人依恋量类型介绍
  11. jdk的安装(redhat)
  12. ES(Elasticsearch)更改字段索引
  13. pandorabox 潘多拉固件路由器作为无线打印机服务器记录
  14. 姿态估计之Yaw Pitch Roll
  15. win7做ftp服务器是否稳定,win7可以做ftp服务器吗
  16. android textview 字体边框,为TextView添加一个边框的几种办法
  17. 信息系统项目管理师考试难吗
  18. 信息系统项目管理师——历年论文题目2012年-2020年
  19. 数据分析:新冠疫情实时数据爬取
  20. 淘宝接口 http://ip.taobao.com/service/getIpInfo.php?ip=myip 获取不到手机ip地址

热门文章

  1. 人人都是 DBA(VII)B 树和 B+ 树
  2. 用haproxy结合keepalived实现基于LNMP的负载均衡和高可用
  3. java尝试编写macd,试验顶背离底背离
  4. MYSQL 中的LEFT( RIGHT ) JOIN使用ON 与WHERE 筛选的差异
  5. CCleaner v5.12.5431 单文件汉化版
  6. 学习css3的弹性盒模型
  7. 利用css3实现jQuery中的slideDown和slideUp效果
  8. DBA工具——DMV——通过sys.dm_exec_procedure_stats查看存储过程执行信息
  9. 编译预处理 -- 带参数的宏定义--【原创】
  10. 谈谈char ,nchar,varchar,nvarchar 和Uniqueidentifier