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

27 getcwd 的调试

前言

同样是一个 很常用的 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.lryc.cn/news/92840.html

相关文章:

  • 使用IDEA使用Git:Git使用指北——实际操作篇
  • java boot将一组yml配置信息装配在一个对象中
  • 【裸机开发】链接脚本(.lds文件)的基本语法
  • Java 进阶 -- 集合(三)
  • 【华为OD机试真题 C语言】5、TLV解析 | 机试真题+思路参考+代码解析
  • (七)CSharp-刘铁锰版-事件
  • 【ROS】郭老二博文之:ROS目录
  • Android应用程序进程的启动过程
  • 【2】Midjourney注册
  • 第六十八天学习记录:高等数学:导数(宋浩板书)
  • unreal 5 实现角色拾取功能
  • chatgpt赋能python:如何使用Python升序排列一个列表?
  • Lecture 20 Topic Modelling
  • ThreadPoolExecutor线程池
  • chatgpt赋能python:Python实践:如何升级pip
  • 【JavaEE进阶】mybatis
  • Redis的大key
  • MMPretrain
  • 栈和队列(数据结构刷题)[一]-python
  • 【备战秋招】JAVA集合
  • setState详解
  • Qt5.12.6配置Android Arm开发环境(windows)
  • 七、进程程序替换
  • C++核心编程——详解运算符重载
  • 2023年前端面试汇总-CSS
  • Java调用Pytorch实现以图搜图(附源码)
  • 【EasyX】实时时钟
  • 基于XC7Z100的PCIe采集卡(GMSL FMC采集卡)
  • Kibana:使用 Kibana 自带数据进行可视化(一)
  • MySQL数据库基础 07