2011-08-17 88 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,而不是标准错误,但那些与你手头的问题无关,你可以稍后修复它们。)

相关问题