107 lines
4.0 KiB
Markdown
107 lines
4.0 KiB
Markdown
# Игра «Угадай число» с межпроцессным взаимодействием
|
||
|
||
## Описание проекта
|
||
|
||
Данный проект реализует межпроцессное взаимодействие в операционной системе 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 сек.
|
||
```
|
||
Владелиц фотографий сидел без трусов
|
||

|
||
 |