【C++】mount函數


mount() 用於掛載一個文件系統。

  • 頭文件:  

#include <sys/mount.h>

  • 函數定義:

int mount ( const char* source, const char* target, const char* filesystemtype, unsigned long mountflags, const void * data );

int umount ( const char *target );

int umount2 ( const char *target, int flags );

source:待掛載的文件系統,通常是一個設備名

target:掛載點

filesystemtype:文件系統的類型,例如:"ext2","ext3","msdos","proc","nfs4","iso9660" 

mountflags:指定文件系統的讀寫訪問標志,可能值有:

MS_BIND:執行bind掛載,使文件或者子目錄樹在文件系統內的另一個點上可視。
MS_DIRSYNC:同步目錄的更新。
MS_MANDLOCK:允許在文件上執行強制鎖。
MS_MOVE:移動子目錄樹。
MS_NOATIME:不要更新文件上的訪問時間。
MS_NODEV:不允許訪問設備文件。
MS_NODIRATIME:不允許更新目錄上的訪問時間。
MS_NOEXEC:不允許在掛上的文件系統上執行程序。
MS_NOSUID:執行程序時,不遵照set-user-ID 和 set-group-ID位。
MS_RDONLY:指定文件系統為只讀。
MS_REMOUNT:重新加載文件系統。這允許你改變現存文件系統的mountflag和數據,而無需使用先卸載,再掛上文件系統的方式。
MS_SYNCHRONOUS:同步文件的更新。
MNT_FORCE:強制卸載,即使文件系統處於忙狀態。
MNT_EXPIRE:將掛載點標志為過時。

data:文件系統特有的參數。

  • 返回值

成功執行時,返回0。失敗返回-1,errno被設為以下的某個值 

EACCES:權能不足,可能原因是,路徑的一部分不可搜索,或者掛載只讀的文件系統時,沒有指定 MS_RDONLY 標志。
EAGAIN:成功地將不處於忙狀態的文件系統標志為過時。
EBUSY:一. 源文件系統已被掛上。或者不可以以只讀的方式重新掛載,因為它還擁有以寫方式打開的文件。二. 目標處於忙狀態。
EFAULT: 內存空間訪問出錯。
EINVAL:操作無效,可能是源文件系統超級塊無效。
ELOOP :路徑解析的過程中存在太多的符號連接。
EMFILE:無需塊設備要求的情況下,無用設備表已滿。
ENAMETOOLONG:路徑名超出可允許的長度。
ENODEV:內核不支持某中文件系統。
ENOENT:路徑名部分內容表示的目錄不存在。
ENOMEM: 核心內存不足。
ENOTBLK:source不是塊設備。
ENOTDIR:路徑名的部分內容不是目錄。
EPERM : 調用者權能不足。
ENXIO:塊主設備號超出所允許的范圍。

  • 用例
    int mountResult = mount("10.2.244.66:/home/nfs001", "home/mountpoint", "nfs4", "vers=3,nolock,proto=tcp,add=10.2.244.66" );
    if(mountResult == 0){
    cout<< "Mount succeed!" <<endl;
    }
    else{
    cout<< "Mount failed!" <<endl;
    }

 2.nfs的軟掛載:

mount("10.2.244.66:/home/nfs001",  "home/mountpoint", "nfs4",  "soft,intr,timeo=30,vers=3,nolock,proto=tcp,add=10.2.244.66" );

soft:軟掛載;
timeo:超時限制,單位是0.1s;
vers:nfs的版本;
add:nfs的IP地址;

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM