2011-08-17 8 views
0

私はLinuxプログラムの初心者です。次のコードが失敗した理由その出力は「失敗20」である。 しかし、端末のコマンド:sudoは/ dev/sdbの/ホーム/ abcの/仕事/ 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とないstderrにエラーメッセージを書いて、あなたのコードに様々な他の問題が、ありますが、それら手元の問題には関係ありません。後で修正することができます)

関連する問題