2013-04-08 47 views
1

我运行下面的代码:READDIR花费很长的时间安装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; 
     } 
    } 
} 

当它到达,我有READDIR(已安装的CIFS文件夹),有时 需要15分钟返回。任何人都在乎我怎样才能实现更友好的体验? 每次运行代码时都会发生这种情况,并且共享文件夹 处于脱机状态。它也可以任意地发生(据我所知),也许当共享文件夹harddrive的计算机 “闲置”时。

你说的文件夹是怎么装的?

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

192.168.0.6正在运行Windows 8,如果有问题。 谢谢!

+0

你更喜欢什么结果?你想它快速失败吗? – 2013-04-08 18:28:24

+0

@DavidSchwartz最好是某种迹象表明它可能需要很长时间,但是使用错误代码可以快速失败。也很好奇,为什么它是15分钟,在那之后它成功了,关注你,但我真的不明白为什么需要这么长时间? – Simon 2013-04-08 18:49:02

+0

@DavidSchwartz请注意,如果192.168.0.6不在网络上,它也需要15分钟才能失败,在这种情况下,我认为这是合理的,假设它会失败(相当快速)。 :-) – Simon 2013-04-08 19:00:27

回答

1

15秒是标准CIFS Send2 timeout。如果你希望它失败得更快,你可以在挂载选项中加入timeo选项。指定十分之一秒的超时时间。

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

+1

我认为你误读了,它需要15分钟,而不是秒。这就是为什么我感到困惑。 :-)尽管感谢了很多,但我不知道的有趣的东西! – Simon 2013-04-08 19:26:20