【问题标题】:readdir taking a LONG time on mounted cifs dirreaddir 在已安装的 cifs 目录上花费了很长时间
【发布时间】:2013-04-08 18:26:10
【问题描述】:

我正在运行以下代码:

void EnumerateFolder(std::string folder)
{ 
    DIR* directory;
    struct dirent* entry;

    directory = opendir(folder.c_str());
    if(directory != NULL)
    {
        while((entry = readdir(directory)) != NULL)
        {
            std::cout << entry->d_name;
        }
    }
}

当它到达一个已安装的 CIFS 文件夹时,我有时会使用 readdir() 需要 15 分钟 才能返回。任何人都愿意启发我了解正在发生的事情 以及如何获得更友好的体验? 每次我使用共享文件夹运行代码和计算机时都会发生这种情况 离线。它也是任意发生的(据我所知),也许当计算机 共享文件夹的硬盘是“空闲的”。

你说的文件夹是怎么挂载的?

cat /etc/fstab
//192.168.0.6/MyShare /home/MyUser/MountedShare cifs guest 0 0

192.168.0.6 正在运行 Windows 8,如果这很重要的话。 谢谢!

【问题讨论】:

  • 你想要什么结果?您希望它快速失败吗?
  • @DavidSchwartz 最好有某种迹象表明它可能需要很长时间,但是会出现错误代码的快速失败。也很好奇为什么它是 15 分钟,在那之后它会成功,请注意,但我真的不明白为什么需要这么长时间?
  • @DavidSchwartz 请注意,如果 192.168.0.6 不在网络上,也需要 15 分钟才能失败,在这种情况下,我认为假设它会失败是合理的(也很快)。 :-)

标签: c++ ubuntu cifs


【解决方案1】:

15 秒是标准的CIFS Send2 timeout。如果您希望它更快地失败,您可以在挂载选项上放置一个timeo 选项。以十分之一秒为单位指定超时时间。

文件系统并不真正知道为什么应用程序要读取文件。快速超时可能会中断长时间运行的进程,例如,如果可执行代码页面出现错误。所以一般来说,网络文件系统试图模仿本地文件系统的语义,即等待底层存储响应所需的时间。

【讨论】:

  • 我认为你看错了,它需要 15 分钟,而不是几秒钟。这就是为什么我很困惑。 :-) 非常感谢你的链接,我不知道的有趣的东西!
猜你喜欢
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 2017-05-10
  • 2015-08-02
  • 1970-01-01
相关资源
最近更新 更多