Не удается получить доступ к файлу в сетевом хранилище (NAS) с помощью функции доступа C ++ ()? - PullRequest
4 голосов
/ 03 марта 2011

Например, у меня есть Isilon NAS в 10.20.30.11, и я смонтировал его следующим образом:

mount 10.20.30.11:/folder /content

Я мог бы использовать команду ls для поиска файла в папке или /content.Его мод 777.

bash-3.00# ls -l /content/a/b/1.txt

total 344131

rwxrwxrwx   1 1005     65533    140750 Feb 28 00:58 1.txt

Но я не могу получить к нему доступ с помощью функции access ().

#include <iostream>
#include <string>
#include <unistd.h>
#include <cerrno>

using namespace std;

#include <stdio.h>
int main( int argc, const char* argv[] )
{
    int returnVal = 0;
    returnVal = access(argv[1], R_OK);
    cout << returnVal << endl;
    cout << errno << endl;
    return 0;
}

В результате будут возвращены -1 и 2, что означает «Нет такихфайл или каталог '.

./a.out /content/a/b/1.txt

-1 

2

#define ENOENT   2 /* No such file or directory */

Я думаю, это не проблема с правами доступа, потому что мод - 777, а результат - "Нет такого файла или каталога".

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Из справочных страниц по Linux.

access () может работать некорректно в NFS файловые системы с включенным отображением UID, потому что отображение UID выполняется на сервер и скрыт от клиента, который проверяет разрешения.

1 голос
/ 10 марта 2011

Наконец, установлено, что для подключения хранилища Isilon необходимо использовать следующую команду:

mount -o vers = 2, proto = tcp 1.2.3.4:/remote / mnt

Необходимо указать версию и протокол.

Спасибо!

...