2025-04-18 06:41:43 +00:00
2025-04-18 02:02:50 +03:00
2025-04-06 18:42:54 +03:00
2025-04-18 06:41:43 +00:00
2025-04-06 18:42:20 +03:00
2025-04-18 02:08:21 +03:00
2025-04-18 02:08:21 +03:00
2025-04-18 02:08:21 +03:00

Игра «Угадай число» с межпроцессным взаимодействием

Описание проекта

Данный проект реализует межпроцессное взаимодействие в операционной системе 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().

🛠 Компиляция и сборка проекта

Для компиляции используйте команду:

make

Для компиляции отдельных заданий:

make signals
make pipe

или

make pipe

🚀 Запуск программ

▶️ Решение с помощью сигналов:

./guess_signals N

Пример запуска:

./guess_signals 100

▶️ Решение с помощью неименованных каналов:

./guess_pipe N

Пример запуска:

./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 photo2

Description
No description provided
Readme 290 KiB
Languages
C 98.1%
Makefile 1.9%