не удалось смонтировать, ошибка 20? - PullRequest
0 голосов
/ 17 августа 2011

Я новичок в программе 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 ]

1 голос
/ 17 августа 2011

Вы не можете подключить устройство, только каталог.Попробуйте указать полезное значение для mountflags.

0 голосов
/ 17 августа 2011

Вы должны распечатать не только значение errno, но и соответствующее сообщение об ошибке:

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

Это должно раскрыть причину проблемы.(«Не каталог», поэтому /home/abc/work/tmp не является каталогом.)

(Существуют и другие проблемы с вашим кодом, такие как пропущенные операторы #include и запись сообщений об ошибках в стандартный выводи не stderr, но они не имеют отношения к вашей проблеме под рукой. Вы можете исправить их позже.)

0 голосов
/ 17 августа 2011

Ошибка 20: ENOTDIR (http://www -numi.fnal.gov / offline_software / srt_public_context / WebDocs / Errors / unix_system_errors.html ).

Я думаю, что для MS_BIND вам понадобится, чтобы первым аргументом был какой-то фактический каталог, а не устройство. См. Также справочную страницу для mount

То, что вы пытаетесь сделать, будет эквивалентно sudo mount --bind /dev/sdb /home/abc/work/temp, что также приведет к ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...