当前位置: 首页 > news >正文

系统调用函数——命令行工具readlink

在Linux和其他类Unix系统中,readlink是一个系统调用和命令行工具,用于读取符号链接(symbolic link)的值。符号链接是一种特殊类型的文件,它包含另一个文件或目录的路径作为其数据。换句话说,它是一个指向另一个文件的指针。

// readlink 是一个用于读取符号链接(symbolic link)目标路径的系统调用和命令行工具。
ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);

( 其中,pathname: 符号链接文件的路径;buf: 用于存储符号链接目标路径的缓冲区;bufsiz: 缓冲区的大小。函数返回,成功时:返回读取的字节数;失败时:返回-1,并设置errno )

命令行用例

readlink [选项] 文件-f, --canonicalize: 递归跟随符号链接,返回规范化的绝对路径
-e, --canonicalize-existing: 仅当目标存在时返回规范路径
-m, --canonicalize-missing: 即使目标不存在也返回规范路径
-n, --no-newline: 不输出末尾的换行符
-q, --quiet: 静默模式
-v, --verbose: 详细模式

基本用法及规范化路径如下:

# 创建符号链接
ln -s /usr/bin/python3 python_link# 读取符号链接目标
readlink python_link
# 输出: /usr/bin/python3#--------------------------------------------------------------# 创建多层符号链接
ln -s ../dir1/file.txt link1
ln -s link1 link2# 普通读取
readlink link2
# 输出: link1# 规范化读取
readlink -f link2
# 输出: /absolute/path/to/dir1/file.txt#---------------------------------------------------------------
# 脚本用例
#!/bin/bash
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
echo "脚本所在目录: $SCRIPT_DIR"

项目中的用例

获取脚本真实路径: 在bash脚本中确定脚本自身的真实位置
解析符号链接: 查看软链接实际指向的目标
系统信息查询: 读取 /proc 文件系统中的符号链接信息
路径规范化: 将相对路径和符号链接转换为绝对路径

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>int main() {char buf[1024];ssize_t len;len = readlink("/proc/self/exe", buf, sizeof(buf)-1); // 获取当前执行程序的真实路径if (len != -1) {buf[len] = '\0';printf("当前程序路径: %s\n", buf);} else {perror("readlink");}return 0;
}

/proc/self: 指向当前进程的目录
/proc/self/exe: 是一个符号链接,指向当前进程对应的可执行文件的完整路径

/*在程序中定位资源文件*/
// 基于程序位置找到配置文件的路径
char exe_path[1024];
char config_path[1024];
readlink("/proc/self/exe", exe_path, sizeof(exe_path)-1);// 获取程序所在目录
char *dir = dirname(exe_path);
snprintf(config_path, sizeof(config_path), "%s/config.conf", dir);/*检测程序是否被符号链接调用*/
//# 假设创建了符号链接
//ln -s /usr/bin/real_program /usr/local/bin/shortcut// 在程序中可以检测是否通过符号链接调用
char actual_path[1024];
readlink("/proc/self/exe", actual_path, sizeof(actual_path)-1);if (strstr(actual_path, "shortcut") != NULL) {printf("通过快捷方式调用\n");
}

readlink("/proc/pid/exe")
获取指定进程的程序路径;进程监控工具
readlink("symlink_file")
解析普通符号链接;查看软链接指向
readlink -f path
规范化路径;脚本中获取绝对路径

// 获取程序所在目录,用于加载同级目录的配置文件
char* get_program_dir() {static char dir[1024];char exe_path[1024];ssize_t len = readlink("/proc/self/exe", exe_path, sizeof(exe_path)-1);if (len == -1) return NULL;exe_path[len] = '\0';char *dir_end = strrchr(exe_path, '/');if (dir_end) {*dir_end = '\0';strcpy(dir, exe_path);return dir;}return NULL;
}

这个用法主要用于程序自我定位,在需要基于程序位置查找配置、资源文件或检测执行环境的场景中非常有用。readlink 不会自动在缓冲区末尾添加 null 字符。如果缓冲区太小,返回的路径会被截断。使用 -f 选项时,所有中间符号链接都会被递归解析。

http://www.dtcms.com/a/443575.html

相关文章:

  • 手机电脑网站排名wordpress评论要审核吗
  • 用凡科做网站的费用群晖wordpress修改端口
  • 怎么做网站frontpage天津做手机网站建设
  • 织梦网站内容怎么做付费可见网络工程技术适合女生吗
  • c 做网站怎么发布郑州网站建设包括哪些
  • 网站自己可以备案吗个人网站开发项目总结
  • 黄埔建网站公司鲨鱼座 网站建设
  • 解析法直接解密椭圆曲线-陈墨仙
  • 在线教学视频网站建设工业企业网络推广
  • wordpress适合做什么网站seo推广排名
  • 操作系统复习第二篇
  • 网站互动优化甘肃城乡建设部网站首页
  • 卖童书的网站该怎么做c 网站开发用的人多吗
  • 【Leetcode】11. 盛最多水的容器
  • 房地产开发建设网站温州网站建
  • 上海单位建设报建网站内蒙古城乡建设部网站首页
  • 网站关键词词库怎么做p2p提供网站建设违法
  • wordpress 文档制作主题中山seo技术
  • 智慧物流赛项的技术平台与环境建设:打造虚实融合的竞技舞台
  • 中卫市住房建设局网站山西长治做网站公司有哪些
  • Python 日历记事本完整开发教程(自绘日历版)
  • 【ROS2学习笔记】DDS(数据分发服务)
  • 网站开发公司徐州三明seo培训
  • 做品牌 需要做网站吗网站建设运营期末考试
  • id注册网站wordpress访问不了
  • 阿克苏网站建设咨询logo图案大全
  • 百度网站建设电话网站seo优化技巧
  • 龙华品牌网站建设石景山区公司网站建设
  • 河南省建设网站电力建设期刊网站投稿
  • 北京做网站公司排名浩森宇特江苏省建设档案网站