2011-08-17 94 views
0

我是linux程序中的新手。爲什麼以下代碼失敗?其輸出是「失敗20」。 但在終端命令:sudo mount/dev/sdb/home/abc/work/tmp工程。掛載失敗,errno是20?

void main() 
{ 
    int rtn; 

    rtn=mount("/dev/sdb","/home/abc/work/tmp","vfat",MS_BIND,""); 
    if (rtn==-1) 
     printf("failed %d.\n",errno); 
    else 
     printf("OK!\n"); 
} 
+0

當你說「linux program」時,你的意思是C語言嗎? –

回答

0

錯誤20是ENOTDIR(01​​)。

我認爲與MS_BIND,你需要第一個參數是一個實際的目錄,而不是一個設備。另請參閱the man page for mount

您試圖做的事情將相當於sudo mount --bind /dev/sdb /home/abc/work/temp這也會給您一個錯誤。

1

您無法綁定掛載設備,只能掛載目錄。嘗試爲mountflags提供有用的值。

0

你應該打印出來不只是errno值,而且相應的錯誤信息:

printf("failed %d: %s\n", errno, strerror(errno)); 

這應該揭示了問題的原因。 (「不是一個目錄」,所以/home/abc/work/tmp似乎並沒有成爲一個目錄。)

(還有其他各種問題與您的代碼,如缺少#include語句,寫錯誤信息到stdout,而不是標準錯誤,但那些與你手頭的問題無關,你可以稍後修復它們。)

相關問題