pr5_sysprog/README.md
2025-04-18 02:08:21 +03:00

107 lines
4.0 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.

# Игра «Угадай число» с межпроцессным взаимодействием
## Описание проекта
Данный проект реализует межпроцессное взаимодействие в операционной системе 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)