swich1234 2023-09-13 19:59 采纳率: 7.7%
浏览 3

内核4.17以上 如何通过 fd 获取路径

请问 内核4.17以上 如何通过 fd 获取路径,只能获取到文件描述符fd 如何得到路径呢

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-13 22:20
    关注

    【以下回答由 GPT 生成】

    问题解答:

    在Linux内核4.17以上的版本中,可以使用/proc/self/fd目录下的符号链接来获取文件路径。具体的步骤如下:

    1. 首先,使用readlink()函数来读取/proc/self/fd目录下文件描述符(fd)对应的符号链接。该函数的原型在unistd.h头文件中定义。

      ```

      include

      ssize_t readlink(const char pathname, char buf, size_t bufsiz); ```

      • pathname参数为文件路径,由/proc/self/fd目录下的符号链接名组成。
      • buf参数为存储读取结果的缓冲区,需要预先分配足够的空间。
      • bufsiz参数为缓冲区的大小。
    2. 打开/proc/self/fd目录并读取其中的文件名。这些文件名就是文件描述符(fd)对应文件的路径。

      ```bash DIR dir = opendir("/proc/self/fd"); struct dirent entry;

      while ((entry = readdir(dir)) != NULL) { // 过滤掉不是符号链接的文件和上级目录 if (entry->d_type != DT_LNK || strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { continue; }

      // 读取符号链接对应的文件路径
      char link_path[PATH_MAX];
      char file_path[PATH_MAX];
      
      snprintf(link_path, sizeof(link_path), "/proc/self/fd/%s", entry->d_name);
      ssize_t len = readlink(link_path, file_path, sizeof(file_path) - 1);
      if (len != -1) {
          file_path[len] = '\0';
          printf("File path: %s\n", file_path);
      }
      

      }

      closedir(dir); ```

    以上就是通过文件描述符(fd)获取文件路径的具体解决方案。如果有任何其他问题,请随时向我提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月13日

悬赏问题

  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip