readdir занимает много времени на смонтированном cifs dir

Я запускаю следующий код:

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, если это имеет значение.
Спасибо!

1

Решение

15 секунд это стандарт Тайм-аут CIFS Send2. Если вы хотите, чтобы он вышел из строя быстрее, вы можете поставить timeo опция в опциях монтирования. Укажите время ожидания в десятых долях секунды.

Файловая система на самом деле не знает Зачем приложение хочет прочитать файл. Быстрые тайм-ауты могут нарушить долго выполняющиеся процессы, если они, например, приводят к сбоям в страницах исполняемого кода. Итак, в общем, сетевые файловые системы пытаются имитировать семантику локальных файловых систем, которая должна ждать столько времени, сколько необходимо для ответа базового хранилища.

1

Другие решения

Других решений пока нет …