4.17 symlink和readlink函数-符号链接

2023-11-18

一、symlink函数

symlink函数用于创建一个符号链接文件。函数原型:

#include <unistd.h>
int symlink(const char *actualpath, const char *sympath);

返回值:如果创建成功则返回0,否则返回-1

参数:

actualpath 要指向的路径

sympath 被创建的新目录项路径

symlink的本质是相当于creat一个文件sympath,并把actualpath的值(字符串)写进文件sympath,同时把文件标识为符号连接类型。

可见,symlink和link函数虽然都产生一个叫作链接的东西,但二者完全是两码事。(参阅《4.15 link、unlink函数与文件目录项》)

实例 x.4.17.1.c

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    char     actualpath[] = "/tmp/myfile";
    char     sympath[] = "/tmp/mysymlink";

    if (symlink(actualpath, sympath) == -1)
        printf("symlink error for %s\n", sympath); 
    else
        printf("symlink succeed for %s\n", sympath); 

    return 0;

}


编译与执行:

[root@localhost unixc]# rm -f /tmp/myfile /tmp/mysymlink
[root@localhost unixc]# ls -l /tmp/myfile /tmp/mysymlink
ls: cannot access /tmp/myfile: No such file or directory
ls: cannot access /tmp/mysymlink: No such file or directory
[root@localhost unixc]# echo "123456789" > /tmp/myfile
[root@localhost unixc]# ls -l /tmp/myfile /tmp/mysymlink
ls: cannot access /tmp/mysymlink: No such file or directory
-rw-r--r--. 1 root root 10 Nov  5 02:36 /tmp/myfile
[root@localhost unixc]# cc x.4.17.1.c
[root@localhost unixc]# ./a.out
symlink succeed for /tmp/mysymlink
[root@localhost unixc]# ls -l /tmp/myfile /tmp/mysymlink
-rw-r--r--. 1 root root 10 Nov  5 02:36 /tmp/myfile
lrwxrwxrwx. 1 root root 11 Nov  5 02:36 /tmp/mysymlink -> /tmp/myfile
[root@localhost unixc]# rm -f /tmp/myfile /tmp/mysymlink
[root@localhost unixc]# ls -l /tmp/myfile /tmp/mysymlink
ls: cannot access /tmp/myfile: No such file or directory
ls: cannot access /tmp/mysymlink: No such file or directory
[root@localhost unixc]# ./a.out
symlink succeed for /tmp/mysymlink
[root@localhost unixc]# ls -l /tmp/myfile /tmp/mysymlink
ls: cannot access /tmp/myfile: No such file or directory
lrwxrwxrwx. 1 root root 11 Nov  5 02:37 /tmp/mysymlink -> /tmp/myfile
[root@localhost unixc]#

分析:

(1)先删除掉/tmp/myfile和/tmp/mysymlink

(2)echo一个/tmp/myfile

(3)编辑执行,成功执行并创建了一个符号链接:lrwxrwxrwx. 1 root root 11 Nov  5 02:36 /tmp/mysymlink -> /tmp/myfile

(4)再删除掉/tmp/myfile和/tmp/mysymlink,让/tmp/myfile的情况下symlink看看

(5)结果在/tmp/myfile不存在的情况下symlink成功了。



二、readlink函数

readlink函数用于读取符号链接文件本身数据(一个字符串,用来表达要指向的文件的路径),而不是指向的文件的数据。也就是取出调用symlink函数时写入的actualpath

函数原型:

#include <unistd.h>
ssize_t readlink(const char* restrict pathname, char *restrict buf, size_t bufsize);
返回值:如果读取成功则返回实际读到的字节数,否则返回-1

参数:

pathname 符合链接文件的路径

buf 存放取出数据的指针

bufsize 要取出的数据的字节数

readlink函数实际上组合了open、read和close的所有操作。函数不会在buf的最后自动加null字符终止符,所以调用printf输出之前要添上去。

实例 x.4.17.2.c

#include <stdio.h>
#include <unistd.h>

#define BUFFSIZE 1024

int main(void)
{
    char     sympath[] = "/tmp/mysymlink";
    ssize_t  size;
    char     buf[BUFFSIZE];

    if ((size = readlink(sympath, buf, BUFFSIZE)) < 0) {
        printf("readlink error for %s", sympath);
        return 1;
    } else {
        buf[size] = '\0';
        printf("%s\n",buf);
    }
    
    return 0;

}

编译与执行:

[root@localhost unixc]# rm -f /tmp/mysymlink
[root@localhost unixc]# cc x.4.17.1.c -o mysyml
[root@localhost unixc]# ./mysyml
symlink succeed for /tmp/mysymlink
[root@localhost unixc]# ls -l /tmp/mysymlink
lrwxrwxrwx. 1 root root 11 Nov  5 03:05 /tmp/mysymlink -> /tmp/myfile
[root@localhost unixc]# cc x.4.17.2.c
[root@localhost unixc]# ./a.out
/tmp/myfile
[root@localhost unixc]#

分析:

(1)把实例 x.4.17.1.c编译为 mysyml,然后调用./mysyml创建一个符号链接

(2)编译本例,执行./a.out

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4.17 symlink和readlink函数-符号链接 的相关文章

随机推荐

  • word中行距设置固定值,图片显示不全的问题

    撰写毕业大论文时 要求正文行间距设置为20磅固定值 但会出现 粘贴图片时 图片显示不全 软件也把图片做一行的固定值显示 解决办法是 选中图片 按ctrl 1单倍行距组合键 此时图片就能显示全了 图片的行间距就是单倍行距
  • 腾讯采用Intertrust的Marlin DRM方案保护其在线视频服务

    转自 http tech ifeng com internet detail 2013 01 11 21094087 0 shtml 1月10日 Intertrust公司今天宣布 已授权腾讯使用Marlin DRM方案保护腾讯在线视频平台的
  • 5.DML语句

    DML语句用于操作数据表的数据 如 插入 修改 删除 insert into update和delete from三个命令组成 1 insert into INSERT INTO grade id math VALUES 1 83 若省略表
  • Android下设置CPU核心数和频率

    现在的Android手机双核 四核变得非常普遍 同时CPU频率经常轻松上2G 功耗肯定会显著增加 而大多数的ARM架构的CPU采用的是对称多处理 SMP 的方式处理多CPU 这就意味着每个CPU核心是被平等对待的 同时打开又同时关闭 显然
  • python中的eval

    eval将字符串作为执行命令 题目 https www hackerrank com challenges py set discard remove pop 也可以使用getattr a b 相当于a b 代码如下 n int input
  • vue中如何监听localStorage中值的变化

    一 说明 在日常开发中 我们经常使用localStorage来存储一些变量 这些变量会存储在浏览中 对于localStorage来说 即使关闭浏览器 这些变量依然存储着 方便我们开发的时候在别的地方使用 二 localStorage的使用
  • Java集合的使用

    集合的使用 集合框架的概述 数组在存储多个数据的特点 数组在存储多个数据的缺点 Java 集合可分为 Collection 和 Map 两种体系 Collection接口 Map接口 Collection 接口的使用 说明 常用方法 案例一
  • java hashcode() 和equals()详解 以及set不能重复问题

    1 首先equals 和hashcode 这两个方法都是从object类中继承过来的 equals 方法在object类中定义如下 public boolean equals Object obj return this obj 很明显是对
  • Qt——用于表格QTableView的模型

    如果想使用表格来呈现数据 Qt提供了一个方便的部件QTableWidget 但是直接用它实现一些功能可能比较困难 这里将介绍一种强大 灵活的方式来操作表格 一 模型 视图架构 在这个架构中 模型用于存储数据 视图用于呈现数据 除此之外 还有
  • Windows Linux 子系统安装步骤

    准备 一 启用 适用于Linux的Windows子系统 功能 方法一 Win10搜索 控制面板 打开 选择 程序和功能 项 左上角 启用或关闭Windows功能 翻到最下方 选择 适用于Linux的Windows子系统 确定后按提示操作即可
  • VC++ CComboBox自绘阶段性总结

    在绘制列表框左侧的时候 本来说是采用的CImageList接口进行绘制 结果发现绘制后的图标不干净 有锯齿或者黑色背景存在 于是采用了GDI 来实现左侧图标的绘制 代码如下 GDI是完全可以通过图像处理彻底解决图标不干净问题的 之前文章有介
  • LeetCode 88 合并两个有序数组

    LeetCode 88 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你 合并 nums2 到 nums1 中 使合并后
  • 0基础学python——文件操作

    这一小节的内容主要是python的文件操作函数和相关内容 文件 就是把一些数据存放起来 可以让程序下一次执行的时候直接使用而不必重新制作一份 gt 文件类型 文本文件 以文字存储为主 读写均以 字符 为单位 二进制文件 以图形 声音 影像为
  • 解决python urllib3报错urllib3.exceptions.MaxRetryError xxx [SSL: CERTIFICATE_VERIFY_FAILED] xxx

    完整报错如下 urllib3 exceptions MaxRetryError HTTPSConnectionPool host xxxxx port 443 Max retries exceeded with url xxxxxxx Ca
  • platform总线、设备、驱动模型之led驱动实例

    在 Linux 2 6 的设备驱动模型中 关心总线 设备和驱动这 3 个实体 总线将设备和驱动绑定 在系统每注册一个设备的时候 会寻找与之匹配的驱动 相反的 在系统每注册一个驱动的时候 会寻找与之匹配的设备 而匹配由总线完成 注意 所谓的p
  • makefile脚本基本语法

    l Makefile脚本流程 Shell脚本 make命令和Makefile make命令是一个常用的编译命令 尤其在C C 开发中 make命令通过makefile文件中描述源程序之间的依赖关系进行自动编译 makefile文件是按照规定
  • npm install 安装失败,一直卡在sill idealTree buildDeps没有反应

    运行npm install 安装失灵 一直卡在sill idealTree buildDeps没有反应 网上其他的方法全试了一遍都不行 最后把npm降级就解决了 npm install npm 6 g
  • 【华为OD机试真题】学校的位置(python)100%通过率 超详细代码注释 代码优化

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 学校的位置 知识点数组贪心排序 时间限制 1s空间限制 256MB限定语言 不限 题目描述
  • 全球及中国网络剧行业十四五发展机遇及投资热点分析报告2021-2027年

    全球及中国网络剧行业十四五发展机遇及投资热点分析报告2021 2027年 HS HS HS HS HS HS HS HS HS HS HS HS 修订日期 2021年10月 搜索鸿晟信合研究院查看官网更多内容 第一章 网络剧相关概述 1 1
  • 4.17 symlink和readlink函数-符号链接

    一 symlink函数 symlink函数用于创建一个符号链接文件 函数原型 include