猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
从C中的文件描述符检索文件名
是否可以在C中获取文件描述符(Linux)的文件名?
鸿蒙传说
浏览 458
回答 3
3回答
一只萌萌小番薯
我在MacOSX上有这个问题。我们没有/proc虚拟文件系统,因此接受的解决方案无法工作。相反,我们有一个F_GETPATH命令fcntl: F_GETPATH Get the path of the file descriptor Fildes. The argu- ment must be a buffer of size MAXPATHLEN or greater.因此,要获取与文件描述符关联的文件,可以使用以下代码段:#include <sys/syslimits.h>#include <fcntl.h>char filePath[PATH_MAX];if (fcntl(fd, F_GETPATH, filePath) != -1){ // do something with the file path}因为我不记得在哪里MAXPATHLEN被定义了,我想PATH_MAX从塞斯菲尔德来就可以了。
0
0
0
跃然一笑
正如泰勒所指出的,没有办法“直接和可靠地”完成所需的工作,因为给定的FD可能对应于0文件名(在各种情况下)或>1(后一种情况通常是由多个“硬链接”描述的)。如果您仍然需要有所有限制的功能(在速度和获得0,2的可能性上),.结果,而不是1),这是你能做到的方法:首先,fstat这个FD-这告诉你,在结果struct stat文件是在什么设备上运行的,它有多少硬链接,是否是一个特殊的文件等等。这可能已经回答了您的问题-例如,如果0硬链接,您就会知道磁盘上实际上没有相应的文件名。如果数据给了你希望,那么你必须在相关设备上的目录“遍历树”,直到你找到所有硬链接(或者仅仅是第一个链接,如果你不需要超过一个并且任何一个都会做到)。为此,你用雷迪尔(当然,还有opendir&c)递归打开子目录,直到在struct dirent因此,接收到的inode号与原来的inode编号相同。struct stat(此时,如果您想要整个路径,而不仅仅是名称,则需要向后遍历目录链以重构它)。如果这个一般的方法是可以接受的,但是您需要更详细的C代码,那么请告诉我们,编写它并不困难(尽管如果它是无用的,我宁愿不写它,也就是说,您无法承受不可避免的缓慢性能,或者为了您的应用程序而获得!=1结果的可能性;-)。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关问题
centos7里没有locate命令,请问在哪里有centos6.5的镜像文件?
2 回答
相关分类
Linux
linux
2 回答
centos7里没有locate命令,请问在哪里有centos6.5的镜像文件?
2 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续