Как эффективно использовать opendir и readdir на сетевом диске с высокой задержкой? - PullRequest
0 голосов
/ 13 января 2020

Существует проблема с моей программой в том, как она обрабатывает opendir или readdir в сетевом расположении с высокой задержкой.

В общем, проблем не было, поскольку сеть функционировала нормально. Но в одном случае сеть показала большую задержку, и в результате программа зависла.

Я также проверил доступ к сети, пытаясь открыть папку вручную, и это заморозило Windows Explorer. Иногда мне удавалось получить доступ к папке верхнего уровня в сети, но затем она снова зависала, пытаясь получить доступ к следующему уровню.

Среда

  • Windows 7
  • Программа скомпилирована с использованием g cc с помощью mingw

Это часть кода, которая сначала пытается получить доступ к сетевой папке:

Соответствующий код

    DIR           * dptr;
    struct dirent * directory;
    FILE          * net_acr_loc, * net_acr;
    char            net_loc[ MAX_PATH ], c = 0;


    if( NULL != ( dptr = opendir( net_loc ) ) ) //first check whether the lock file exists
    {
        while( NULL != ( directory = readdir( dptr ) ) )
        {
            if( strstr( directory -> d_name, ".lckacr" ) )
            {
                closedir( dptr );
                return NULL;                 //it exists, return early
            }
        }
        closedir( dptr );
    }

Я думал, что он зависал при вызове opendir, потому что он, возможно, еще ничего не был возвращен.

Значение net_lo c получено ранее, и этот раздел не отображается.

Можно ли добавить какой-нибудь таймер?

Согласно Linux странице справочника , поток каталога возвращается или NULL, если был ошибка.

...