LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1218|回复: 12

得到fd后 如何得到对应的文件名?

[复制链接]
发表于 2003-6-5 18:09:13 | 显示全部楼层 |阅读模式
有没有正常点的办法 ?
发表于 2003-6-5 20:44:53 | 显示全部楼层
你的fd是怎么得到的呢?
 楼主| 发表于 2003-6-5 21:12:13 | 显示全部楼层
主程序里得到的用户参数文件名+路径 但是不希望把这个字符串存下来
发表于 2003-6-5 22:44:25 | 显示全部楼层
没搞过这种问题,就我现在知道的好象没有什么简单的办法。
UNIX的文件系统中文件名是保存在目录中的,目录中也保存有文件的i节点,所以可以通过文件名得到文件,但是反过来好象没有什么好办法,除非读目录,并且比较每个文件的i节点,但是想想硬连接,一个i节点可以对应几个文件名,难道要把所有的目录都读一遍?

以上是我的理解,回头给你找一找,看有没有什么办法,刚才看了一本书,书上说内存中的i节点比磁盘上的i节点多一些记录,但是没有说清楚多了什么,查查再说。
发表于 2003-6-6 01:00:40 | 显示全部楼层
最初由 libinary 发表
没搞过这种问题,就我现在知道的好象没有什么简单的办法。
UNIX的文件系统中文件名是保存在目录中的,目录中也保存有文件的i节点,所以可以通过文件名得到文件,但是反过来好象没有什么好办法,除非读目录,并且比较每个文件的i节点,但是想想硬连接,一个i节点可以对应几个文件名,难道要把所有的目录都读一遍?

以上是我的理解,回头给你找一找,看有没有什么办法,刚才看了一本书,书上说内存中的i节点比磁盘上的i节点多一些记录,但是没有说清楚多了什么,查查再说。


不同意
输入FD
通过FSTAT函数能得到该文件的信息节点,大小,时间,权根

得到该文件名应该也能的,只是我们不知
发表于 2003-6-6 02:18:38 | 显示全部楼层
我看了/proc/xxxx/fd下的文件描述符,都是符号连接,有文件名,我想既然/proc下有,进程里也应该有吧,不过还没找到。
现在的办法是:
  1. char s[256], name[256];
  2. snprintf(s, 255, "/proc/%d/fd/%d", getpid(), fd);
  3. readlink(s, name, 255);
复制代码
name就是文件名,包含路径。
发表于 2003-6-6 04:15:47 | 显示全部楼层
呵呵,我看这个办法还不如早早就把文件名字保存下来省事儿呢。
发表于 2003-6-6 07:42:55 | 显示全部楼层
这种想法确实是自找麻烦。有兴趣可以去看看内核的数据结构,它在设计时就没有考虑这样的问题。
 楼主| 发表于 2003-6-6 09:18:32 | 显示全部楼层
libinary说的是 硬连接的情况会对应不同的文件名 可能这就是为什么现在看来不能反向得到文件名吧 保留参数倒也不难 但是这个字符串老是会要传到这个函数 传到那个参数 很是麻烦啊
发表于 2003-6-7 07:54:35 | 显示全部楼层
能不能把文件名设置成全局变量呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表