免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3555 | 回复: 6
打印 上一主题 下一主题

如何从已知文件描述符得到当前打开的文件名啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-28 11:21 |只看该作者 |倒序浏览
function f1( FILE * fp)
{
     如何在这个函数体中根据fp得到对应的文件名?
}

论坛徽章:
0
2 [报告]
发表于 2005-01-28 11:31 |只看该作者

如何从已知文件描述符得到当前打开的文件名啊?

原帖由 "jervis" 发表:
function f1( FILE * fp)
{
     如何在这个函数体中根据fp得到对应的文件名?
}

fd = fileno(fp);
fstat(fd,&statbuf);
根据statbuf.st_ino自己找吧

论坛徽章:
0
3 [报告]
发表于 2005-01-28 12:04 |只看该作者

如何从已知文件描述符得到当前打开的文件名啊?

fstat( fileno(fp), &st)
充满struct stat st 结构,但st中并无path name.
如果在module中容易,
从st中的st_ino 到 inode->;i_dentry->;d_name可以得到filename,
然后再inode->;i_dentry->;d_parent->;d_name得到 .. 的dirname
再重复一直到/
可以得到PATHNAME。

在APP中,最好是自己建立个table记忆住fd 和 PATHNAME对应,可以立即查找到。

论坛徽章:
0
4 [报告]
发表于 2005-01-28 12:06 |只看该作者

如何从已知文件描述符得到当前打开的文件名啊?

在module中直接从struct file
file->;f_dentry做刚才的事情也可以(更简单)

论坛徽章:
0
5 [报告]
发表于 2005-01-28 12:07 |只看该作者

如何从已知文件描述符得到当前打开的文件名啊?

原帖由 "lisp" 发表:

fd = fileno(fp);
fstat(fd,&statbuf);
根据statbuf.st_ino自己找吧


statbuf中得到的是文件的inode信息,而linux中文件的名字与inode是分离的,所以statbuf中不包含文件名.

一种可行的方法是:首先得到本进程的pid,然后搜索/proc/pid/fd,该目录列 出了以该进程打开的文件的描述符命名的符号连接,这些符号连接指向对应的文件名.

其实,你的这种需求在实际中是不必要的,因为要处理文件名的话,在你fopen的时候保留下来以备后用就可以了.你非要通过文件指针得到,其实是走了弯路,因为我说的察看proc的方法显然是比较麻烦的.更重要的是,这种方式不具有严格的可移植性.

论坛徽章:
0
6 [报告]
发表于 2005-01-28 12:08 |只看该作者

如何从已知文件描述符得到当前打开的文件名啊?

app中,根据inode号,用ftw可以在文件系统中找到,只是需要的时间太长了
不知道有没有其他办法?

论坛徽章:
0
7 [报告]
发表于 2005-01-28 13:15 |只看该作者

如何从已知文件描述符得到当前打开的文件名啊?

原帖由 "nhw_cs" 发表:

其实,你的这种需求在实际中是不必要的,因为要处理文件名的话,在你fopen的时候保留下来以备后用就可以了.你非要通过文件指针得到,其实是走了弯路,因为我说的察看proc的方法显然是比较麻烦的.更重要的是,这种方式不具有严格的可移植性.


同意
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP