pr7_sysprog/README.md
2025-04-25 10:18:24 +03:00

46 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Рекурсивный поиск слова в файлах директории
## Описание
Программа `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`
Доступ к файлам через отображение-в-память сделан.