给定目录名称,如何找到它所在的C语言系统?

时间:2012-03-08 10:59:58

标签: c linux filesystems directory mount

例如,样本df命令输出为

Filesystem    MB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd4         512.00    322.96   37%     4842     7% /
/dev/hd2        4096.00    717.96   83%    68173    29% /usr
/dev/hd9var     1024.00    670.96   35%     6385     4% /var
/dev/hd3        5120.00      0.39  100%      158    10% /tmp

现在,如果我指定/tmp/dummy.txt之类的内容,我应该能够获得/dev/hd3hd3

编辑:谢谢你的回答。但探究/proc会变得非常繁琐。任何人都可以建议我一些内部可以做同样的系统调用吗?

2 个答案:

答案 0 :(得分:4)

df `pwd`

...超级简单,有效,并且还告诉你有多少空间......

[stackuser@rhel62 ~]$ pwd
/home/stackuser
[stackuser@rhel62 ~]$ df `pwd`
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda7            250056240 196130640  41223408  83% /
[stackuser@rhel62 ~]$ cd isos
[stackuser@rhel62 isos]$ pwd
/home/stackuser/isos
[stackuser@rhel62 isos]$ df `pwd`
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda5            103216920  90417960  11750704  89% /mnt/sda5
[stackuser@rhel62 isos]$ df $(pwd)
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda5            103216920  90417960  11750704  89% /mnt/sda5

...这首先是挂载点查询的可能原因。

请注意,这些是反引号,并且提供对斜杠和扩展的进一步控制的备用(现代)方法是df $(pwd)。在bashdashbusyboxzsh上正确测试和遍历符号链接。请注意,tcsh不会喜欢$(...),因此请坚持使用csh-variants中较旧的反引号样式。

pwddf还有额外的开关可供进一步欣赏。

答案 1 :(得分:3)

在Linux上,使用/proc/<pid>/mounts来访问给定pid/proc/self/mounts(使用文字self)的挂载点列表以引用自己。 (cat /proc/self/mount*个文件,看看它们是什么样的。)

然后,对于每个文件系统,您可以进行statfs()调用并将f_fsid f_fsid字段与相关路径中较早的statfs()的结果进行比较。 fsid's匹配后,您找到了相应的已安装文件系统,并可以使用/proc/self/mounts中的其他数据。 (但是,请参阅statfs(2),了解对f_fsid执行任何有用的操作的限制。)