readdir在装载的CIFs dir上花了很长时间

时间:2013-04-08 18:26:11

标签: c++ ubuntu cifs

我正在运行以下代码:

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分钟才能返回。任何人都想关心发生了什么事 以及如何获得更友好的体验? 每次我运行代码和带有共享文件夹的计算机时都会发生这种情况 离线。它也是随意发生的(据我所知),也许是在计算机上 共享文件夹harddrive是“空闲”。

你说文件夹是怎么说的?

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

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

1 个答案:

答案 0 :(得分:1)

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

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