Я запускаю следующий код:
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, если это имеет значение.
Спасибо!
15 секунд это стандарт Тайм-аут CIFS Send2. Если вы хотите, чтобы он вышел из строя быстрее, вы можете поставить timeo
опция в опциях монтирования. Укажите время ожидания в десятых долях секунды.
Файловая система на самом деле не знает Зачем приложение хочет прочитать файл. Быстрые тайм-ауты могут нарушить долго выполняющиеся процессы, если они, например, приводят к сбоям в страницах исполняемого кода. Итак, в общем, сетевые файловые системы пытаются имитировать семантику локальных файловых систем, которая должна ждать столько времени, сколько необходимо для ответа базового хранилища.
Других решений пока нет …