c语言 realpath 函数用法

Linux中的realpath命令:深入解析与实用指南 是Linux中一个非常有用的命令,它可以帮助我们快速、准确地获取文件或目录的绝对路径。在Linux操作系统中,路径处理是文件操作和系统管理的核心部分。当我们需要在脚本或命令行中引用文件或目录时,了解文件或目录的确切位置至关重要。它接受一个或多个文件或目录的路径作为输入,并返回这些文件或目录的绝对路径。命令就是Linux中一款功能强大的工具,它能帮助我们快速获取文件或目录的绝对路径。命令的工作原理、主要特点、使用示例,以及在实际应用中的注意事项和最佳实践。),确保返回的路径是最短且唯一的。 阅读详情
AI摘要

本文介绍了C语言中的realpath函数,用于将路径转换为绝对路径。函数原型包括处理null参数的情况,以及注意事项如使用方法、内存管理、错误处理等。,

很难想象,居然能找不到一篇比较好的介绍 realpath 的文章。

  • 功能简述: 将路径转为绝对路径。
  • 函数原型: char * realpath (const char *restrict name, char *restrict resolved)
    ○ name:原始路径。
    ○ resolved:存放规范化路径的地址。可以为 null(含义在下面解释)。
    ○ 返回值:正常情况和resolved是同一个指针。不正常呢(见下面解释)。
  • 头文件: stdlib.h

注意,realpath 并不是标准C函数,而是 POSIX 函数,所以你不能在 cppreference.com 这类网站找到使用说明。应该去 gnu 的 glibc 文档中找。

使用方法

很简单,第一个参数指向的路径经过格式化会被复制到第二个参数指向的内存。
最常见的用法:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main()
{
    char *rpath = "./../";
    char apath[PATH_MAX + 1];
    char *ret = realpath(rpath, apath);
    printf("ret = %s\n", ret);
    printf("apath = %s\n", apath);
    return 0;
}

打印:
ret = /home/cyd/my-github
apath = /home/cyd/my-github

null

前面提到, resolved 参数可以为 null。当它为 null 时等同于函数canonicalize_file_name,返回值指向函数内动态申请的内存空间,所以要记得 free。
你可能会认为 canonicalize_file_name 这么容易忘记 free 导致内存泄漏,谁会用呢?
事实上,如果传入的第二参数 resolved 非 null 指针,一定要保证有足够的空间存放格式化的地址。一般 Linux/Unix 系统会在limits.h头文件中定义PATH_MAX宏,表示路径名的最大长度。但是有的系统可能会没有这个定义,那你就不能使用第二个参数非 null 的 realpath 函数了,因为很容易导致越界。


另外还有一种情况,传入的第一个参数(路径字符串)可能是实际不存在的地址,realpath 函数依然会按照当前工作目录计算绝对路径,存放在第二个参数指向的内存空间。但是,返回值就为 null 了,并且将 errno 置为 EACCES(返回路径不可读)或者 ENOENT(返回路径不存在)

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
int main()
{
    char *rpath = "./../a";
    char apath[PATH_MAX + 1];
    char *ret = realpath(rpath, apath);
    printf("ret = %s\n", ret);
    printf("apath = %s\n", apath);
    printf("errno = %s\n", errno == EACCES ? "EACCES" :
                           errno == ENOENT ? "ENOENT" :
                           "??");
    return 0;
}

打印
ret = (null)
apath = /home/cyd/my-github/a
errno = ENOENT

上面提到 canonicalize_file_name (name) 等同于 realpath(name, null),特点就是会自动申请动态内存。

电源完整性之Cadence Sigrity Power DC_电热协同仿真 之前和大家分享过电源完整性之仿真设计原理链接: link.今天接着上一篇文章总结一下电源直流压降的的仿真操作流程及一些simulation中的设置参数,用到的是Cadence Sigrity 中的Power DC组件,来操作一下电热协同仿真,下面开始享受仿真的快乐吧: 第0步:仿真简介 电热协同仿真把电和热相互的影响考虑到了一起。因为电导率并不是固定不变的,而是和温度有关,随着温度的升高导电率会下降。同样电流流径电阻的时候会产生热量,此热量为焦耳热。因此为了获得准确的仿真信息,应考虑电与热的互相影响,进行电 阅读详情

相关推荐

ADS1231驱动开发:24位高精度ADC嵌入式实现指南

24位Δ-Σ型ADC是高精度传感器信号采集的核心器件,其原理基于过采样与数字滤波实现远超奈奎斯特极限的分辨率。技术价值在于以低成本硬件达成微伏级信号分辨能力,显著提升称重、压力、力等桥式传感器系统的动态范围与温漂稳定性。典型应用场景涵盖电子秤、工业变送器及材料测试设备等对线性度、零点漂移和抗工频干扰(50/60Hz)有严苛要求的领域。本文围绕ADS1231这一面向惠斯通电桥优化的专用ADC,深入解析其串行同步时序驱动、PGA增益配置、参考电压匹配及FreeRTOS多任务安全集成等关键工程实践。

weixin_34268462的博客 624

学习一个 Linux 命令:realpath 命令

转自:恋猫大鲤鱼链接:https://dablelv.blog.youkuaiyun.com/article/details/90710645 1.命令简介realpath 用于获取指定目录或...

小詹学python的博客 991

dell r630 配置raid_DELL服务器RAID配置图文教程

名称解释:Disk Group:磁盘组,这里相当于是阵列,例如配置了一个RAID5,就是一个磁盘组VD(Virtual Disk): 虚拟磁盘,虚拟磁盘可以不使用阵列的全部容量,也就是说一个磁盘组可以分为多个VDPD(Physical Disk): 物理磁盘HS:Hot Spare 热备Mgmt:管理【一】创建逻辑磁盘1、按照屏幕下方的虚拟磁盘管理器提示,在VD Mgmt菜单(可以通过CTRL+P...

weixin_33253741的博客 3510

realpath函数使用注意事项

realpath函数的参数,必须使用PATH_MAX大小的内存空间,否则是非常不安全,在某些设备上经过验证,哪怕是PATH_MAX-1都会崩溃。正如使用如下: char file_path[PATH_MAX]; memset(file_path, 0, sizeof(file_path)); realpath("/proc/self/exe", file_path); 那么可能有人会问什么场...

huangjiazhi_的博客 1万+

告别编译报错!STC32G12K128在Keil C251下的完整Target配置指南(附ROM设置详解)

本文详细介绍了STC32G12K128在Keil C251下的完整Target配置指南,包括ROM设置、CPU模式选择、内存模型优化等关键步骤。通过实战技巧和常见错误解决方案,帮助开发者高效搭建编译环境,避免常见报错,充分发挥STC32G系列芯片的性能优势。

weixin_29186249的博客 339

光学仿真案例(1) 铌酸锂非线性波导仿真模拟 FDTD仿真

在过去几年里,许多集成光子学应用往往需要多个相干可调谐光源,而且从外部激光器引入额外的光输入增加了芯片封装的复杂性,如果使用基于III-V族、氮化硅(SiN)或铌酸锂(LNO)的集成光源又大大增加了制造复杂性和成本。然而,通过非线性谐波相互作用产生的光源不需要额外的制造工艺来产生增益、反馈和外部电路,即可支持许多应用。在下面的案例中,演示了一种基于Luo[1]的铌酸锂波导频率转换集成系统。该案例主要仿真了利用温度调制实现高效相位匹配的铌酸锂纳米光子波导的二次谐波产生。

q895235273的博客 4142

Linux Shell系列--realpath 返回给定路径的规范化绝对路径名

realpath命令主要功能是解析给定的路径(相对路径、绝对路径、符号链接)并返回该路径的真实、绝对路径。

coderma的博客 3213

告别Vivado自带编辑器!手把手教你用Sublime Text 4 + Icarus Verilog搭建FPGA开发环境(Windows 10/11)

本文详细介绍如何在Windows 10/11系统下,使用Sublime Text 4和Icarus Verilog搭建高效的FPGA开发环境,替代Vivado自带编辑器。通过配置语法检查、代码高亮和智能补全等功能,提升Verilog开发效率,实现专业级工作流。

weixin_30684743的博客 427

Linux命令-realpath指令

realpath 是一个用于获取文件或目录的绝对路径的 Linux 指令。-z:将输出的路径以 null 结尾,便于处理包含空格的路径。-m:如果文件或目录不存在,则返回其父目录的绝对路径。-s:不解析符号链接,直接返回符号链接本身的路径。-e:如果文件或目录不存在,则报错。-f:强制将符号链接解析为真实路径。1.获取当前目录下文件的绝对路径。2.处理不存在的文件路径。4.处理包含空格的路径。

ZhanBiaoChina的博客 643

逍遥模拟器改真机参数全指南:从ARM伪装到电池传感器模拟

本文提供逍遥模拟器深度伪装实战指南,重点讲解如何通过修改ARM架构、系统属性和模拟传感器数据,使其在硬件信息、电池状态等维度逼近真实设备,有效规避应用检测。文章详细介绍了使用Magisk模块、LSPosed框架进行设备指纹伪装和动态数据模拟的策略,帮助用户实现从静态信息到动态行为的全方位真机模拟。

weixin_29279101的博客 451

MySQL 8.0数据库崩了别慌!手把手教你仅凭一个.ibd文件找回数据(附Go工具包)

本文详细介绍了在MySQL 8.0数据库崩溃后,如何仅凭.ibd文件恢复数据的完整流程。通过使用Go语言工具包和ALTER TABLE技巧,即使没有备份也能实现数据重生。文章包含从环境准备到数据验证的全方位指导,帮助DBA和开发者应对紧急数据恢复场景。

weixin_29235923的博客 419

C函数加密实现及常用字符串处理函数的使用

getpass() getpass()函数用于从控制台输入一行字符串,关闭了回显(输入时不显示输入的字符串),适用于用密码的输入。 语法 char * getpass (const char * prompt); 参数prompt为提示字符串地址。 getpass()函数返回值:输入字符串地址。 #include #include int main(void)

andrewbytecoder 3329

Windows部署OpenClaw报错不断?这篇环境配置指南帮你解决难题

想在Windows上部署OpenClaw却频频报错?🔧 本文详细梳理了OpenClaw部署必需环境的安装步骤和官方下载地址 📦,提供完整的验证清单和常见问题排查方法,帮你一次性搞定所有环境配置,顺利部署OpenClaw ✅

XiaoqiangClub的博客 6626

c语言realpath

函数原型: char *realpath(const char *path, char *resolved_path) 头文件: #include <limits.h> #include <stdlib.h> 函数说明: 将参数path所指的相对路径转换成绝对路径后存于参数resolved_path所指的字符串数组或指针中 如果resolved_path为NULL,则该函数调用malloc分配一块大小为PATH_MAX的内存来存放...

phmatthaus的专栏 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

c语言中函数realpath,c - 用C的realpath函数的例子 - SO中文参考 - www.soinside.com

什么realpath()功能所做的就是告诉你一个文件的路径时,所有符号链接都得到了解决。它不一定是一个绝对路径,如果你提供的价值是相对的名字,但部分取决于你是否穿越与链接值绝对名称的任何符号链接 - 如果你这样做,那么输出是一个绝对的名字毕竟。此外,如果相对名称遍历到根目录(或“超越”,如“../../../../../ ..”当在目录层次深只有三个级别)。你可能有一个“真实路径”计划已经在你的机...

weixin_39874589的博客 1502

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Linux C++ realpath函数crash的解决方法

调用realpath函数进程崩溃,可使用如下代码复现

louObaichu的专栏 942

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

realpath和access函数浅谈

在我所做项目中,用上了realpath和access函数,整理一下一.主要说明1.realpath函数 头文件: #include <limits.h> #include <stdlib.h>  函数原型:char *realpath(const char *path, char *resolved_path)   函数说明:realpath()用来将参数path所

哒哒的博客 1万+

c语言realpath的用法,node.js中的fs.realpath方法使用说明

方法说明:获取真实路径。可以使用process.cwd解决相对路径。语法:fs.realpath(path, [cache], [callback(err , resolvedPath)])由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) )接收参数:path 路径cache...

weixin_39582569的博客 501

c语言中函数realpath,C realpath函数不适用于源文件中定义的字符串

我对realpath函数有一个奇怪的问题.当函数被赋予一个作为程序参数接收的字符串时,该函数会起作用,但是当给出我在源代码中定义的字符串时,该函数会失败.这是一个简单的程序:#include #include #include int main(int argc, const char* argv[]){char* fullpath = (char*)malloc(PATH_MAX);if(rea...

weixin_39814378的博客 852

Linux 相对路径转化为绝对路径 C语言 (realpath函数)

如果resolved_path为NULL,则该函数调用malloc分配一块大小为PATH_MAX的内存来存放解析出来的绝对路径,并返回指向这块区域的指针。事实上,我的代码中第一种用法absPath很有可能会越界,如果传入的第二参数 resolved 非 null 指针,一定要保证有足够的空间存放格式化的地址,可以使用PATH_MAX宏。将参数path所指的相对路径转换成绝对路径后存于参数resolved_path所指的字符串数组或指针中。但是有的系统可能会没有这个定义,所以还是建议使用第二种用法。

thank86的博客 1841

php realpath 无效,每日一博 | PHP7 realpath 函数一个长期存在的 bug

实在是忍不住要吐槽一下,从7.0.0到7.0.4的时候,我一直在看这个bug,而且也发去php issues了,已经说修复了,但是显然并没有修复。后来忙,就没管这个问题了,可是到今天,都7.0.14了,7.1.0都发布了,还是没修复啊!phar包假定我有一个phar包,包内结构如下: $paths = ['phar://phar_test.phar/hello','phar://phar_tes...

weixin_28720767的博客 584

C语言分析——文件操作

文件操作工具函数 相对路径转换函数realpath 设置文件当前指针fseek 读取文件 读取一个字符函数fgetc 读取一个字符串函数fgets 格式化读取字符串函数fscanf 写入文件 写入一个字符函数fputc 写入一个字符串函数fputs 格式化写入字符串函数fprintf 写入一个块文件函数fwrite头文件:#include 文件操作工具函数相对路径转换函数:realpath头文件:#

zxng_work的博客 1070

c语言 realpath函数,getenv_s - [ C语言中文开发手册 ] - 在线原生手册 - php中文网

在头文件中定义char * getenv(const char * name);(1)errno_t getenv_s(size_t * restrict len,char * restrict value,rsize_t valuesz,const char * restrict name);(2)(自C11以来)1)name在主机指定的环境列表中搜索具有名称的环境变量,并返回指向与匹配的环境变...

weixin_32141627的博客 571

C语言中的危险函数

函数 严重性 解决方案 gets 最危险 使用 fgets(buf, size, stdin)。这几乎总是一个大问题! strcpy 很危险 改为使用 strncpy。 strcat 很危险 改为使用 strncat。 sprintf 很危险 改为使用 snprintf,或者

SubiU 7529

c语言 linux取运行目录,linux下获取程序当前目录绝对路径

【原文:http://blog.youkuaiyun.com/small_qch/article/details/9198833】 1、Shell版 [html] view plaincopyprint? #获取当前脚本所在绝对路径 cur_dir =$(cd$(dirname$0);pwd) #获取当前脚本所在绝对路径 cur_dir=$(cd $(dirname $0); pwd) 2、C语言版 方法一:...

weixin_42311000的博客 1495

unix realpath函数实现代码

// // Created by xia on 2022/4/5. // #include <libgen.h> #include "tlpi_hdr.h" #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> char *my_realpath(const char *path, char *resolved_path) {

weixin_39566143的博客 825
上一篇: sys.path[0] 和 __file__ 的区别
悟空又丢了
博客等级 码龄10年 0粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值