LinuxSir.cn,穿越时空的Linuxsir!

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

请问有什么系统调用可以获取系统中已挂载的文件系统列表?

[复制链接]
发表于 2006-9-29 10:22:53 | 显示全部楼层 |阅读模式
如果从/etc/mtab读取这一列表,当/etc/mtab被认为做了改动,或被删除,得到的结果就是不正取的。
如果从/proc/mounts获取,有可能/proc文件系统没有被挂载上去

不知道有没有什么系统调用可以做这一事情?
发表于 2006-9-29 17:46:56 | 显示全部楼层
可以参考下 mount 的实现
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-30 09:29:24 | 显示全部楼层
已经看过

mount首先是读取/etc/mtab文件,
如果文件不存在,则从/proc/mounts 中获取信息

你可以试试:移除/etc/mtab,卸载/proc/mounts,然后运行mount命令
回复 支持 反对

使用道具 举报

发表于 2006-9-30 17:17:55 | 显示全部楼层
跟踪了一下 mount 的系统调用(AIX 5.3, Linux kernel 2.6), 确实是先读 /etc 下的配置文件, 然后再读 /proc 下的信息(AIX 5.3 下没有试过, 主机不能瞎折腾). 在读取 /etc 下配置文件中的信息后, 似乎是通过 ioctl 等系统调用来确认文件系统是否已经挂载.

不过, 在把 /etc/mtab 删除后, 然后运行 umount /proc 从没有真正成功, 不过再运行 mount 确实没有输出了, 但过不久 /etc/mtab 又会自动出现, 虽然内容是空的. 另外, 记得对 /proc 的支持是编译入内核的, /proc 应该一直都在的, 而且其也是内核数据结构的实时反映.
回复 支持 反对

使用道具 举报

发表于 2006-9-30 17:26:33 | 显示全部楼层
http://www.freebsdchina.org/utils/phpMan.php/man/getfsstat/2
http://www.freebsdchina.org/utils/phpMan.php/man/getmntinfo/3
http://www.freebsdchina.org/utils/phpMan.php/man/statfs/2

getfsstat, getmntinfo, statfs
手头没有机器, 只好找了一个 FreeBSD 的 online man pages, 所以这些函数是否存在于 Linux 中我不知道, 也不知道它们是否能完成楼主想要的功能
回复 支持 反对

使用道具 举报

发表于 2006-9-30 17:27:57 | 显示全部楼层
/etc/mtab 本来就是一个动态更新的文件吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-3 19:03:13 | 显示全部楼层
/etc/mtab是动态更新的
mount和umount命令都更新它

man getfsstat, man getmntinfo都没有结果。
man fsstat 倒是有点信息,可以根据某一路径返回一个挂载的文件系统的信息
回复 支持 反对

使用道具 举报

发表于 2006-10-3 21:01:29 | 显示全部楼层
http://www.blog.edu.cn/user1/5494/archives/2005/145462.shtml
man 5 fstab
search about getmntent

maybe useful
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-5 16:52:26 | 显示全部楼层
谢谢各位的热心帮助

但 getmntent 并不能解决问题
它有一个参数,是一个文件名。文件的格式要求类似/etc/mtab
使用setmntent, getmntent, endmntent从这一文件中读取信息。读出的信息并不一定是系统中已挂载的文件系统。我们可以使用同样的格式编写一个新文件,然后用这几个函数读取。
回复 支持 反对

使用道具 举报

发表于 2007-12-2 17:16:46 | 显示全部楼层
mount 的实现在哪里?
回复 支持 反对

使用道具 举报

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

本版积分规则

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