Я создаю приложение, которое должно проверить каталог на наличие новых файлов, а затем для каждого нового файла запустить новый процесс, который манипулирует этим файлом (после чего файл удаляется) .
В основном программа сводится к следующему:
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
, чтобы проверить, является ли файл новым, потому что с использованием ОЗУдолжно быть намного быстрее.
Спасибо!