可以用C语言获取文件描述符(Linux)的文件名吗?

推荐答案

您可以在/proc/self/fd/NNN上使用readlink,其中NNN是文件描述符.这将为您提供文件打开时的名称——但是,如果文件从那时起被移动或删除,它可能不再准确(尽管Linux在某些情况下可以跟踪重命名).要验证,请输入给定的文件名stat和fd fstat,并确保st_devst_ino相同.

当然,并不是所有的文件描述符都指向文件,对于这些描述符,你会看到一些奇怪的文本字符串,比如pipe:[1538488].因为所有真正的文件名都是绝对路径,所以您可以很容易地确定哪些是绝对路径.此外,正如其他人所指出的,文件可以有多个指向它们的硬链接——这只会报告打开文件时使用的硬链接.如果想找到给定文件的所有名称,只需遍历整个文件系统.

C++相关问答推荐

ISO_C_BINDING,从Fortran调用C

如何将字符串argv[]赋给C中的整型数组?

核心转储文件中出现奇怪的大小变化

有没有可能我不能打印?(C,流程)

CSAPP微型shell 实验室:卡在sigprocmask

如果dim指定数组中的数据量,使用dim-1会不会潜在地导致丢失一个元素?

函数内的局部字符指针

C-使用指针返回修改后的整数数组

进程在写入管道时挂起

GDB输出ARM助记符

每次除以或乘以整数都会得到0.0000

是否需要包括<;errno.h>;才能使用perror?

指向不同类型的指针是否与公共初始序列规则匹配?

如何在c中使用具有不同变量类型的内存分配?

链接器脚本和C程序使用相同的头文件,这可能吗?

如何在zOS上编译共享C库

不带Malloc的链表

Makefile无法将代码刷新到ATmega328p

const struct 成员的 typedef 中的灵活数组大小

全局变量 y0 与 mathlib 冲突,无法编译最小的 C 代码