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

发布于 2024-10-20 01:51:53 字数 940 浏览 3 评论 0原文

例如,我有一个 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,结果是“没有这样的文件或目录”。

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'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

野鹿林 2024-10-27 01:51:53

来自 Linux 手册页。

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

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.

睡美人的小仙女 2024-10-27 01:51:53

最后发现需要使用如下命令来挂载Isilon存储。

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

需要指定版本和协议。

谢谢!

Finally, it is found that it need to use following command to mount the Isilon storage.

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

The version and protocol need specified.

Thanks!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文