46 lines
2.6 KiB
Markdown
46 lines
2.6 KiB
Markdown
# Рекурсивный поиск слова в файлах директории
|
||
|
||
## Описание
|
||
Программа `wordsearch` на языке C рекурсивно обходит заданную директорию и её вложенные каталоги (включая скрытые, начинающиеся с точки) и ищет указанное слово во всех текстовых файлах. При обнаружении выводятся полный путь к файлу, номер строки и сама строка с найденным словом.
|
||
|
||
## Требования
|
||
- Директория поиска передаётся первым аргументом командной строки (по умолчанию `~`).
|
||
- Слово для поиска передаётся вторым аргументом командной строки.
|
||
- Поддерживается флаг `-i` для игнорирования регистра.
|
||
- Обрабатываются скрытые файлы и директории.
|
||
- Корректная обработка ошибок (отсутствие директории, ошибки доступа).
|
||
|
||
## Сборка
|
||
```bash
|
||
make
|
||
```
|
||
|
||
## Запуск
|
||
```bash
|
||
# По умолчанию ищет в ~:
|
||
./wordsearch искомое_слово
|
||
|
||
# В указанной директории:
|
||
./wordsearch /путь/к/директории искомое_слово
|
||
|
||
# С игнорированием регистра:
|
||
./wordsearch -i /путь/к/директорий ИскОмоЕ_СлОвО
|
||
```
|
||
|
||
## Пример вывода
|
||
```
|
||
/home/user/files/document.txt:12: Эта строка содержит искомое_слово.
|
||
/home/user/files/.hidden_folder/notes.txt:45: Здесь также есть искомое_слово.
|
||
```
|
||
|
||
## Реализация
|
||
Файл `wordsearch.c` реализует следующие функции:
|
||
- `process_dir(const char *path)` — рекурсивный обход директории.
|
||
- `search_file(const char *filepath)` — построчное чтение через `fgets` и поиск с помощью `strstr` или `strcasestr`.
|
||
- Парсинг аргументов командной строки, установка флага `ignore_case`.
|
||
|
||
## Дополнительное задание 1: игнорирование регистра (-i)
|
||
Флаг `-i`: сравнение сделано через `tolower`.
|
||
|
||
## Дополнительное задание 2: использование `mmap`
|
||
Доступ к файлам через отображение-в-память сделан. |