Просмотр каталога для новых файлов.Быстрее, чем использование функций `dirent`? - PullRequest
0 голосов
/ 18 апреля 2019

Я создаю приложение, которое должно проверить каталог на наличие новых файлов, а затем для каждого нового файла запустить новый процесс, который манипулирует этим файлом (после чего файл удаляется) .

В основном программа сводится к следующему:

while(1) {
    DIR * directory = opendir("/example"); 
    struct dirent * directory_data;
    if(directory) {
       while((directory_data = readdir(directory)) != NULL) {
          if(directory_data->d_type == DT_REG) {
              // Checking if that file is new and was not already manipulated, by a previous loop (stored the last loop list of files in a char array)
              execute_manipulator(directory_data->d_name);
           }
        }
    }
    // With some error checking
    closedir(directory);
    usleep(300000); // 0.3 secs
}

Вопрос касается скорости.Есть ли более быстрый способ проверить каталог на наличие новых файлов, чем использование dirent opendir и readdir?Я заметил, что раз в 3-4 секунды загрузка ЦП программы составляет около 1% (я хотел бы сделать это быстрее, почти не замечать, если это возможно).

Примечание: Я также использовал для хранения списка предыдущих циклов файлов в массиве char вместо сохранения последнего более высокого mtime и использования stat, чтобы проверить, является ли файл новым, потому что с использованием ОЗУдолжно быть намного быстрее.

Спасибо!

...