Search code examples
c++network-programmingnas

Cannot access file in Network Attached Storage (NAS) by using C++ access() function?


I have an Isilon NAS in 10.20.30.11 for example, and I mounted it like following:

mount 10.20.30.11:/folder /content

I could use ls command to find the file in folder or /content. Its mod is 777.

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

total 344131

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

But I cannot access it by access() function.

#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;
}

It will return -1 and 2 as a result, which means 'No such file or directory'.

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

-1 

2

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

It is not a permission problem I think, because the mod is 777, and the result is 'No such file or directory'.


Solution

  • From the Linux man pages.

    access() may not work correctly on NFS file systems with UID mapping enabled, because UID mapping is done on the server and hidden from the client, which checks permissions.