2012-05-02 63 views

回答

4

我不知道实际的系统调用,将做到这一点的,但你可以做的是比较目录的设备编号,你想检查和它的父母。这可以通过stat完成。示例代码(检查省略错误):

#include <stdio.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main(void) { 
    struct stat mp, mp_parent; 
    stat("/boot", &mp); 
    stat("/boot/..", &mp_parent); 

    if (mp.st_dev != mp_parent.st_dev) 
    printf("/boot is a mount point.\n"); 
    else 
    printf("/boot is not a mount point.\n"); 

    return 0; 
} 
+0

感谢您的回复。 –

+0

但是如何比较设备编号回答我的问题? –

+0

如果设备编号不相等,给定的路径是一个安装点。我真的不知道问题是什么。 –

1

是否需要这样的功能,通常(但并非总是),你没有拥抱了系统的抽象红旗...你应该重新考虑你所做的一切。如果您在软件中根据某个加载点是否有某种选择进​​行选择,请考虑将该替代行为设置为可通过脚本控制的参数。人们可以通过使用本地挂载点命令或任何其他参数化程序来采用该行为。

随着该声明不谈,这里有mountpoint.c实现:

http://fossies.org/linux/misc/sysvinit-2.88.tar.gz:a/sysvinit-2.88/src/mountpoint.c

...和 ​​“测试文件类型”

http://www.aquaphoenix.com/ref/gnu_c_library/libc_160.html

+0

如果这个问题只是“这个目录是一个挂载点”,那么你可以说“如果是,卸载它”会怎么样呢?不知道如何抽象。 – stu

0

写您参考自己的应用程序来解析/proc/mounts。然后比较你的路径从/proc/mounts的路径。如果它们相等,那么路径就是一个挂载点。