1

我正在运行以下代码:

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

当它到达我有 readdir() 的已安装 CIFS 文件夹时,有时需要15 分钟才能返回。有人愿意告诉我正在发生的事情以及如何获得更友好的体验吗?每次我运行代码并且具有共享文件夹的计算机处于脱机状态时,都会发生这种情况。它也是任意发生的(据我所知),也许是当具有共享文件夹硬盘的计算机“空闲”时。

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

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

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

4

1 回答 1

1

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

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

于 2013-04-08T19:16:41.847 回答