无法使用C ++ access()函数访问网络连接存储(NAS)中的文件?

时间:2011-03-03 02:44:52

标签: c++ networking nas

例如,我在10.20.30.11中有一个Isilon NAS,我安装如下:

mount 10.20.30.11:/folder /content

我可以使用ls命令查找文件夹或/content中的文件。它的mod是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 */

我认为这不是权限问题,因为mod是777,结果是'没有这样的文件或目录'。

2 个答案:

答案 0 :(得分:2)

来自Linux手册页。

  

access()可能无法在NFS上正常运行   启用了UID映射的文件系统,   因为UID映射是在   服务器和隐藏的客户端,   检查权限。

答案 1 :(得分:1)

最后,发现它需要使用以下命令来安装Isilon存储。

  

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

需要指定版本和协议。

谢谢!