2012-05-02 96 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的路徑。如果它們相等,那麼路徑就是一個掛載點。