请问 内核4.17以上 如何通过 fd 获取路径,只能获取到文件描述符fd 如何得到路径呢
1条回答 默认 最新
关注 【以下回答由 GPT 生成】
问题解答:
在Linux内核4.17以上的版本中,可以使用
/proc/self/fd
目录下的符号链接来获取文件路径。具体的步骤如下:-
首先,使用
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
参数为缓冲区的大小。
-
打开
/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)获取文件路径的具体解决方案。如果有任何其他问题,请随时向我提问。
【相关推荐】
- 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/706170
- 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:网络编程中常用的fd是什么
- 除此之外, 这篇博客: 文件描述符fd,与管道中的 文件描述符 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报-
悬赏问题
- ¥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