# Игра «Угадай число» с межпроцессным взаимодействием ## Описание проекта Данный проект реализует межпроцессное взаимодействие в операционной системе Linux на языке C на примере игры «Угадай число». В игре участвуют два процесса, созданных с помощью системного вызова `fork()`: - **Первый процесс** загадывает число от **1** до **N** и сообщает об этом второму процессу. - **Второй процесс** пытается угадать число, перебирая варианты от **1** и выше. - После того как число угадано, на экран выводится статистика игры: - **Количество попыток** - **Затраченное время** - Затем процессы меняются ролями, и игра начинается заново. Всего проводится не менее **10 раундов**. --- ## 📂 Структура проекта ``` . ├── Makefile ├── guess_signals.c // Решение с помощью сигналов ├── guess_pipe.c // Решение с помощью неименованных каналов (pipe) ├── .gitignore └── README.md ``` ## 🚩 Особенности реализации ✅ **Задание 1:** Используются стандартные и real-time сигналы для взаимодействия. - Передача чисел — real-time сигналы (`SIGRTMIN`). - Уведомление о результате: - `SIGUSR1` — число угадано - `SIGUSR2` — число не угадано ✅ **Задание 2:** Используются неименованные каналы (`pipe`) для межпроцессного взаимодействия. - Два канала: - Из родительского процесса к дочернему - Из дочернего процесса к родительскому - Процессы обмениваются сообщениями и синхронизируются без использования `sleep()`. ## 🛠 Компиляция и сборка проекта Для компиляции используйте команду: ```bash make ``` Для компиляции отдельных заданий: ```bash make signals make pipe ``` или ```bash make pipe ``` ## 🚀 Запуск программ ### ▶️ Решение с помощью сигналов: ```bash ./guess_signals N ``` ### Пример запуска: ```bash ./guess_signals 100 ``` --- ### ▶️ Решение с помощью неименованных каналов: ```bash ./guess_pipe N ``` ### Пример запуска: ```bash ./guess_pipe 100 ``` ## 📌 Пример вывода программы: ``` Раунд 1: Процесс 2356 (ЗАГАДЫВАЮЩИЙ) загадывает число. Раунд 1: Процесс 2357 (УГАДЫВАЮЩИЙ) начинает угадывать. Раунд 1: Процесс 2357 (УГАДЫВАЮЩИЙ) отправил догадку: 1 Раунд 1: Процесс 2356 (ЗАГАДЫВАЮЩИЙ) получил догадку: 1 Раунд 1: Процесс 2357 (УГАДЫВАЮЩИЙ) отправил догадку: 2 Раунд 1: Процесс 2356 (ЗАГАДЫВАЮЩИЙ) получил догадку: 2 ... Раунд 1: Процесс 2357 (УГАДЫВАЮЩИЙ) получил верный ответ для догадки 42. Раунд 1: Процесс 2357 (УГАДЫВАЮЩИЙ) завершил раунд. Попыток: 42, время: 0.002 сек. ``` Владелиц фотографий сидел без трусов ![photo1](photo.jpg) ![photo2](photo1.jpg)