27 getcwd 的调试

news/2025/3/19 4:26:54/

前言

同样是一个 很常用的 glibc 库函数 

不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 获取当前路径  

不过 我们这里是从 具体的实现 来看一下 

测试用例

就是简单的使用了一下 getcwd  

root@ubuntu:~/Desktop/linux/HelloWorld# cat Test04Getcwd.c 
#include "stdio.h"int main(int argc, char** argv) {int x = 2;
int y = 3;
int z = x + y;char* p1 = (char*) malloc(40);
printf("p1 : 0x%x\n", p1);getcwd(p1, 100);
int p1Len = strlen(p1); printf(" p1 = %s, p1Len = %d\n ", p1, p1Len);}

getcwd 的实现

首先确认一下 断点的位置, 位于 main 中的 getcwd 的函数调用 

getcwd 的实现如下 

默认的处理是直接基于 getcwd 的系统调用 

如果名称超长, 则基于 generic_getcwd 来获取当前路径 

generic_getcwd 是基于 proc 文件系统, 获取 proc 文件系统下的 当前进程存储的 cwd 

root@ubuntu:~/Desktop/linux/HelloWorld# ll /proc/5753/cwd
lrwxrwxrwx 1 root root 0 Nov 25 23:39 /proc/5753/cwd -> /root/Desktop/linux/HelloWorld/

getcwd 的系统调用

getcwd 系统调用如下, 这里的当前路径为 "/jerry/dir" 

其中硬盘 "/dev/sda1" 挂载到了 "/jerry" 上面

这里的处理是 当前路径的 dentry 向上开始遍历, 直到碰到 根节点 

然后 将这一系列的路径输出到 buffer 中 


http://www.ppmy.cn/news/325456.html

相关文章

Neuroimage | LMDA-Net第一作者亲自讲述其设计思想

近期, 天津大学精仪学院和医工院联合,在神经科学和神经成像顶刊 Neuroimage中发表题为《LMDA-Net: 一种具有通用性和可解释性的轻量级EEG解码网络》的学术论文, 为解决人工神经网络模型在EEG解码时面临的跨数据集泛化性差、预测波动性高和模型可解释性差…

法拉第屏蔽

法拉第屏蔽(Faraday shield):它能避免来自其后电路的EMI从LED板上的洞孔外泄,从而使EMI将至最低。

发那科系统整套梯形图设计 FANUC全套PMC设计 发那科标 准PLC 完美解决方案

发那科系统整套梯形图设计 FANUC全套PMC设计 发那科标 准PLC 完美解决方案 ##带中文解释## 内容很全 请仔细看完: 1.刀库程序设计(斗笠 圆盘 夹臂 机械手 伞型 都包括) 2.刀架程序(电动 液压 伺服 都包括) 3.操作方式&…

贾跃亭微博发新车V9图片 计划明年量产预售

4月4日消息,贾跃亭发微博称FF正在打造新车V9,并配有一张侧面车身曲线图,称基本设计理念为“融合设计、人工智能以及人车无缝互联的豪华移动智能空间”。 当图片内的车灯亮起时,可以隐隐看到车轮的形状,并且可以看出&am…

virt a mate(vam)版本1.20.77.9介绍和下载

谁是MeshedVR? MeshedVR是一家小型独立开发者,在即将到来的虚拟现实领域享有先进的最新技术。我们的第一个项目专注于推进角色模拟,而这项工作的一个自然出路就是虚拟现实性爱模拟器!因此,我们的Patreon将致力于利用我…