Unix/Linux编程:symlink、readlink

symlink、readlink用来创建、读取软链接

symlink()系统调用会针对由filepath所指定的路径名创建一个新的符号链接----linnpath。(如果想要移除符号链接,需要调用unlink())

NAME
       symlink, symlinkat - make a new name for a file

SYNOPSIS
       #include <unistd.h>

       int symlink(const char *target, const char *linkpath);

       #include <fcntl.h>           /* Definition of AT_* constants */
       #include <unistd.h>

       int symlinkat(const char *target, int newdirfd, const char *linkpath);

  • 如果linkpath中给定的路径名已经存在,那么调用将失败(且将 errno 置为 EEXIST)
  • target指定路径名,可以是绝对路径,也可以是相对路径。

由target所命名的文件或者目录在调用时无需存在。如果不存在或者调用之后被删除了,linkpath()将成为“悬空链接”,其他系统调用试图对其进行解引用操作都将出错(通常错误号为 ENOENT)

如果指定一符号链接这为open()调用的pathname参数,那么将打开链接指向的文件。有时,想要获取链接本身的内容,这是可以使用readlink()调用,将符号链接字符串的一份副本置于buffer指向的字符数组中。

SYNOPSIS
       #include <unistd.h>

       ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);
  • bufsiz是一个整形操作,用以告知readlink()调用buf中的可用字节数
    • 如果一切顺利,readlink()将返回实际放入 buffer 中的字节数
    • 若链接长度超过 bufsiz,则置于 buffer 中的是经截断处理的字符串
  • 由于 buffer 尾部并未放置终止空字符,故而也无法分辨 readlink()所返回的字符串到底是经过截断处理,还是恰巧将 buffer 填满。验证后者的方法之一是重新分配一块更大的 buffer,并再次调用readlink()。另外,还可以将 pathname 的长度定义为PATH_MAX,该常量定义了程序可拥有的最长路径名长度。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值