realpath()库函数对pathname中的所有符合链接一一解引用,从而成功一个以空字符结尾的字符串,内涵相应的绝对路径名:

NAMErealpath - 返回规范化的绝对路径名 SYNOPSIS#include <limits.h>#include <stdlib.h>char *realpath(const char *path, char *resolved_path);描述realpath()扩展所有符号链接,并解析对以path命名的以null终止的字符串中的/./、/../和其他“ /”字符的引用,以产生规范化的绝对路径名。 生成的路径名将以一个以空字符结尾的字符串存储(最多PATH_MAX个字节),存储在由resolve_path指向的缓冲区中。 结果路径将没有符号链接,/。/或/../组件。如果将resolve_path指定为NULL,则realpath()使用malloc(3)分配最多PATH_MAX字节的缓冲区以保存已解析的路径名,并返回指向该缓冲区的指针。 调用者应使用free(3)释放此缓冲区。 RETURN VALUE如果没有错误,则realpath()返回指向resolve_path的指针。否则,它将返回NULL指针,未定义数组resolve_path的内容,并且设置了errno来指示错误。

生成的字符串将置于resolved_path指向的缓冲区中,该字符串是一个字符数组,长度至少是PATH_MAX个字节。一旦调用成功,readpath()将返回一个指向该字符串的一个指针。

glibc的realpath()实现允许调用者将resolved_path参数指定为NULL,这时,realpath()将结果分配到一个最多PATH_MAX字节 的缓冲区中,并将指向该缓冲区的指针作为结果返回(调用者必须自行调用free()来释放该缓冲区)。SUSv3 并未将该扩展功能纳入规范,但SUSv4 对其进行了定义

下面程序中采用 readlink()和 realpath()来读取符号链接的内容,并将该链接解析为一个绝对路径名

#include <sys/stat.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <zconf.h>#define BUF_SIZE PATH_MAX
int
main(int argc, char *argv[])
{struct stat statbuf;char buf[BUF_SIZE];ssize_t numBytes;if (argc != 2 || strcmp(argv[1], "--help") == 0){printf("%s pathname\n", argv[0]);exit(EXIT_FAILURE);}/* User lstat() to check whether the supplied pathname isa symbolic link. Alternatively, we could have checked towhether readlink() failed with EINVAL. */if (lstat(argv[1], &statbuf) == -1) {perror("lstat");exit(EXIT_FAILURE);}if (!S_ISLNK(statbuf.st_mode)){printf("%s is not a symbolic link", argv[1]);exit(EXIT_FAILURE);}numBytes = readlink(argv[1], buf, BUF_SIZE - 1);if (numBytes == -1){perror("readlink");exit(EXIT_FAILURE);}buf[numBytes] = '\0';                       /* Add terminating null byte */printf("readlink: %s --> %s\n", argv[1], buf);if (realpath(argv[1], buf) == NULL){perror("realpath");exit(EXIT_FAILURE);}printf("realpath: %s --> %s\n", argv[1], buf);exit(EXIT_SUCCESS);
}

Unix/Linux编程:解析路径名------realpath()相关推荐

  1. Unix/Linux编程:进程间通信(IPC)总结

    IPC工具分类 如上,Unix系统上IPC根据功能可以分为三类 通信:这些工具关注进程间的数据交换 同步:这些进程关注进程和线程操作之间的同步 信号:虽然信号的主要作用不为此,但是在特定场景下仍然可以 ...

  2. 学习Unix/Linux编程要学些什么

    最近利用空余时间看了一下<Unix/Linux编程实践教程>,原书名为:Understanding Unix/Linux Programming: A Guide to Theory an ...

  3. 《Unix/linux编程实践教程》------重定向程序的I/O

    <Unix/linux编程实践教程>书中举例命令more的用法: $more filename $command | more $more < filename 用法1直接显示fil ...

  4. Unix/Linux编程实践教程–书评

    花了两个月的时间把这本书读完了,完成了一部分的课后习题. 总的来说,这是一本挺好的Unix\Linux编程的入门书(虽然书中的小错误一大堆),书的开始部分简要介绍了Unix系统编程,讲述了如何使用男人 ...

  5. stty详解-Unix/Linux编程实践教程第五章 学习stty

    读书笔记-第五章 连接控制 学习stty 先放上思维导图 为设备编程&设备就像文件 前面所学的知识都是基于文件的,而在unix/linux系统中,所有的设备(打印机,终端,话筒,摄像头等等)也 ...

  6. Unix/Linux编程:通用的IO模型

    概述 所有执行IO操作的系统调用都以文件描述符,一个非负整数(通常是小整数)来指代打开的文件 文件描述符用以表示所有类型的已打开文件,包括管道.FIFO.socket.终端.设备和普通文件 针对每个进 ...

  7. Unix/Linux编程:时间转换

    unix time stamp翻译为时间戳, 就是从1970年1月1日00:00::00以来的秒数. 程序可能会关注两种类型的时间 真实时间.度量这一时间的起点有二: 其一为某个标准点. 也叫做日历时 ...

  8. linux pipe函数 重定向,I/O重定向和管道——《Unix/Linux编程实践教程》读书笔记(第10章)...

    1.I/O重定向的概念与原因 及 标准输入.输出的标准错误的定义 所以的Unix I/O重定向都基于标准数据流的原理.三个数据了分别如下: 1)标准输入--需要处理的数据流 2)标准输出--结果数据流 ...

  9. Unix/Linux编程:Netlink机制

    什么是Netlink通信机制 Netlink是linux提供的用于内核和用户态进程之间的通信方式. 但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信. 只 ...

最新文章

  1. ISA SERVER使用指南
  2. html如何禁止用户缩放,html如何禁止页面缩放
  3. 3、MySQL 8.0.20在Linux(centos 8)上搭建主从复制
  4. 一个用Axure开发的安卓Android智能交通app的mockup
  5. 密歇根安娜堡大学的计算机科学教授,美国密歇根大学安娜堡分校读机械硕士在美国好就业吗?...
  6. 前端学习(2785):实现导航的基本结构
  7. java kryo register_java相关:Kryo框架使用方法代码示例
  8. 华为正式发布鸿蒙智慧屏,5499 元、21999 元,2021 款华为智慧屏 V55/V85 明日 0 点正式开售:搭载鸿蒙系统...
  9. limit实现原理 mysql_解读数据库:深入分析MySQL中事务以及MVCC的实现原理
  10. mysql unknown column mysql.user_MYSQL创建用户Unknown column 'plugin' in 'mysql.user'的解决
  11. Visual Studio调试时失去响应的解决办法
  12. python关机_Python 神操作: 远程开机和关机
  13. Maven 使用本地Tomcat9 一键启动和热部署
  14. iOS Xcode如何打包ipa安装包
  15. 光伏发电与计算机控制,独立太阳能光伏发电系统的控制设计与实现
  16. 大数据在智慧消防领域的应用
  17. Mybatis操作Oracle中的Clob和Blob字段
  18. 1054: 猴子吃桃(C)
  19. 编写优质嵌入式C程序(转)
  20. AI WORLD2016世界人工智能大会:中国力量崛起

热门文章

  1. go语言工作目录都有什么?GOPATH下的目录结构
  2. 网页中的png图片无法显示?
  3. numpy.arange()函数解析
  4. MySQL8免安装版下载安装与配置(windows)
  5. JavaScript事件触发
  6. oracle failed login count metric,Oracle Life: SQL.PLSQL Archives - 云和恩墨,成就所托!
  7. 虚拟机服务器分配内存,服务器虚拟机分配内存大小
  8. java字符串是否相等的三种判断方法
  9. 如何立即关闭 Node 服务器?
  10. 产业新闻-2006.06.02-05