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函数-符号链接 的相关文章

  • 读取内核空间中的符号链接

    我正在编写 LKM 需要找出特定符号链接指向的位置 基本上我需要系统调用的功能readlinkat or readlink 但是在内核空间中 是否有捷径可寻 Using readlinkat直接对我不起作用 我总是收到 EFAULT 我猜这
  • 递归删除目录和所有符号链接

    我尝试使用shutil删除目录及其所有包含的文件 如下所示 import shutil from os path import exists if exists path dir shutil rmtree path dir 不幸的是 我的
  • Windows 如何创建目录符号链接

    我正在尝试创建指向 Windows 8 1 目录的符号链接 使用 git bash 命令窗口以管理员身份运行 具有如下文件夹结构 magento plugin magento 我的插件是一个 git 存储库 我想将其符号链接到 magent
  • 如何在 Windows 8 中重复使用在 Mac 上创建的软链接

    我在 MacBook Pro 中创建的 1000 张图像说 我的软链接很少 我正在 iOS 应用程序中使用它们 现在我正在 Windows 8 手机应用程序中移植相同的应用程序 因此我想在 Windows Phone 8 应用程序中重用相同
  • 如何将符号链接移至垃圾箱?

    我没有看到任何选项FSPathMoveObjectToTrashSync 不跟踪链接的功能 这是我尝试过的 创建链接和文件 21 32 41 tmp touch my file 21 32 45 tmp ln s my file my li
  • OpenCover 使用符号链接时找不到 PDB?

    在我们的输出树中 Test 目录仅包含指向各个构建目录中的 DLL 的符号链接 Win7 x64 实际构建目录中的每个 DLL 旁边都有一个相应的 PDB 文件 但是 当在 Test 目录中的 DLL 上运行 OpenCover 时 它以
  • python导入cv2错误

    每当我尝试导入 cv2 时 我总是会收到此错误 import cv2 Traceback most recent call last File
  • 运行“npm install”时保留符号链接

    如果我们这样做 npm link x 然后我们跑npm install 它将覆盖符号链接包 有没有办法跑npm install不覆盖符号链接包 就像是 npm install preserve symlinks or npm install
  • 解析 Java 中的目录符号链接

    Given a File or Path目录对象 如何检查它是否是符号链接以及如何将其解析为实际目录 我试过了File getCannonicalFile Files isSymbolicLink Path 还有很多其他方法 但似乎都不起作
  • 检测 Mono 中的符号链接和管道

    有没有办法使用 C 和 Mono 来区分特殊文件 例如符号链接和管道 该应用程序是一个多平台备份工具 因此我想避免使用互操作库或 C DLL 并寻找直接托管代码解决方案 经过更多研究后 我找到了解决方案 添加参考MonoPosix项目可以访
  • 如何使用 Python 在 Windows 中创建符号链接?

    我正在尝试创建symlinks在 Windows 8 上使用 Python 我发现这个帖子 https stackoverflow com questions 1447575 symlinks on windows这是我脚本的一部分 imp
  • 虚拟盒与 Windows 10 主机的共享文件夹中的符号链接

    我正在虚拟盒子容器中运行 Linux ubuntu 系统 我在共享目录中使用了符号链接 这需要一些额外的工作 如下所述 https www virtualbox org ticket 10085 https www virtualbox o
  • Dockerfile 中的符号链接命令不会在容器中创建链接

    在我的 Dockerfile 中有这一行 RUN ln s var www html some file var www html another file 运行 docker build 时 会执行所有步骤 包括创建符号链接 但是当我使用
  • Windows:如何将驱动器符号链接到另一个驱动器?

    我有一个客户 其数据已从 H 驱动器移至 I 驱动器 但他们的 Access 导出脚本似乎已将 H 驱动器硬编码为目标 即使它不再存在于新系统上 如何创建映射到 I 驱动器的 H 驱动器 我是一个 unix linux 人 我猜是这样的mk
  • 如何在 Homebrew 中符号链接 python?

    由于某种原因 当我运行 brew link python 时 没有符号链接 我收到以下错误 我按照它告诉我的去做 但它不起作用 我已经尝试按照它告诉我的去做 但也许我没有把公式名称放在正确的位置 另外 当我执行 which python 时
  • 如何复制带有符号链接的目录并解析它们?

    我想递归复制contents包含符号链接 symlinks 以及带有 Bash Shell 脚本的普通文件的目录 我不知道如何复制符号链接内容 伪代码看起来像这样 for file in directory do if is symlink
  • 符号链接检查 - Linux Bash 脚本

    我正在尝试创建一个脚本来搜索目录以查找指向不存在对象的符号链接 我的目录中有一个文件 其中的符号链接已删除 但由于某种原因 当我运行下面的脚本时 它说文件存在 bin bash ls l 1 if d 1 then while read f
  • 有没有通过 fstat() 的 POSIX 方法来检查文件是否是符号链接?

    有没有 POSIX 方式通过fstat 2 检查文件是否是符号链接 有旗帜O NOFOLLOW in open 2 可以检查它 但是 它不是 POSIX 有S ISLNK in fstat 2 其中说man fstat The S ISLN
  • cygwin winsymlinks:本机不起作用

    我现在和 cygwin 斗争了很长一段时间 我广泛搜索了如何让 cygwin 创建 Windows 风格的符号链接 我尝试了以下方法 export CYGWIN winsymlinks native export CYGWIN winsym
  • 如何让 PHP、符号链接和 __FILE__ 很好地协同工作?

    在本地主机上 我有以下目录结构 share www trunk wp content plugins otherfolders share www portfolio wp content symlink Where symlink是一个符

随机推荐

  • 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