mount失败了,errno是20?

时间:2011-08-17 06:43:34

标签: linux mount

我是linux程序的新手。为什么以下代码失败?它的输出是“失败的20”。 但在终端命令: sudo mount / dev / sdb / home / abc / work / tmp 工作。

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");
}

3 个答案:

答案 0 :(得分:1)

您无法绑定安装设备,只能绑定目录。尝试为mountflags提供有用的价值。

答案 1 :(得分:0)

错误20是ENOTDIR(http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Errors/unix_system_errors.html)。

我认为使用MS_BIND,你需要第一个参数是某个地方的实际目录,而不是设备。另请参阅the man page for mount

您尝试做的事情将等同于sudo mount --bind /dev/sdb /home/abc/work/temp,这也会给您一个错误。

答案 2 :(得分:0)

您不仅要打印出errno值,还要打印相应的错误消息:

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

这应该揭示问题的原因。 (“不是目录”,因此/home/abc/work/tmp似乎不是目录。)

(您的代码存在各种其他问题,例如缺少#include语句,以及将错误消息写入stdout而不是stderr,但这些问题与您手头的问题无关。您可以稍后修复它们。)