I'm not sure if this works under Windows.
To build:
cmake .
make all
Usage example:
./yet_another_test_task_av testfolder
====== Scan result ======
Processed files: 11
JS Detects: 1
CMD Detects: 2
EXE Detects: 2
Errors: 1
Execution time: 0:0:0
=========================
Как это работает:
- В Filter.cpp обьявлен класс фильтра, который в конструкторе принимает расширения файлов и строки, на которые он должен срабатывать, и реализует метод Match для проверки того, является ли файл по некоторому пути "подозрительным"
- В SafeQueue.h, Job.h обьявлены структуры для многопоточной синхронизации
- В main мы заранее создаем экземпляры фильтров в соответствии с условием, запускаем n_cpu * 2 потоков и распределяем между ними файлы в текущей директории
- Потом мы отправляем в потоки сообщение о прекращении работы, ждем их остановки и печатаем статистику
Однопоточная версия программы упиралась в дисковое хранилище. Многопоточная реализация позволяет полностью утилизировать CPU, что дает прирост скорости работы, особенно для папок с большими файлами.