6 seems to work
This commit is contained in:
@@ -1,61 +1,62 @@
|
||||
# Makefile для лабораторной: POSIX shared memory + POSIX semaphores. [file:21][web:47]
|
||||
# Сервер сам чистит старые IPC-объекты и корректно завершает работу. [file:21]
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = -Wall -Wextra -std=c99 -g
|
||||
LDFLAGS_IPC = -lrt -pthread
|
||||
|
||||
# SHM/SEM args: <shm_name> <sem_client_name> <sem_server_name> [iterations]
|
||||
SHM_NAME = /myshm
|
||||
SEM_CLIENT_NAME = /sem_client
|
||||
SEM_SERVER_NAME = /sem_server
|
||||
SERVER_ITERS = 3
|
||||
# Аргументы IPC: <shm_name> <sem_client_name> <sem_server_name> [iterations]. [file:21]
|
||||
SHM_NAME ?= /myshm
|
||||
SEM_CLIENT_NAME ?= /sem_client
|
||||
SEM_SERVER_NAME ?= /sem_server
|
||||
SERVER_ITERS ?= 1000
|
||||
|
||||
all: shm
|
||||
all: shm # Цель по умолчанию: сборка server и client. [file:22]
|
||||
|
||||
# ===== POSIX SHM + SEM targets =====
|
||||
shm: server client
|
||||
# ===== Сборка программ POSIX SHM + SEM =====
|
||||
shm: server client # Группа целей для IPC-программ. [file:21]
|
||||
|
||||
server: server.c
|
||||
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS_IPC)
|
||||
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS_IPC) # Сборка сервера. [file:21][web:47]
|
||||
|
||||
client: client.c
|
||||
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS_IPC)
|
||||
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS_IPC) # Сборка клиента. [file:21][web:47]
|
||||
|
||||
# ===== Tests =====
|
||||
# ===== Тесты =====
|
||||
|
||||
# Ручной тест: сервер в одном терминале, клиент в другом. [file:22]
|
||||
test_server: shm
|
||||
@echo "=== Запуск сервера POSIX SHM+SEM ==="
|
||||
@echo "В другом терминале выполните: make test_clients"
|
||||
@echo "В другом терминале выполните: make test_client"
|
||||
./server $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME) $(SERVER_ITERS)
|
||||
|
||||
test_clients: shm
|
||||
@echo "=== Запуск нескольких клиентов ==="
|
||||
echo "abacaba" | ./client $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME) & \
|
||||
echo "xxxxxx" | ./client $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME) & \
|
||||
echo "hello world" | ./client $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME) & \
|
||||
wait
|
||||
# Клиент: читает input.txt, выводит обработанные строки в stdout. [file:22]
|
||||
test_client: shm
|
||||
@echo "=== Запуск клиента, чтение input.txt, вывод на stdout ==="
|
||||
./client $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME)
|
||||
|
||||
# Автотест: сервер в фоне, несколько клиентов
|
||||
# Автотест: сервер в фоне, клиент один раз читает input.txt. [file:22]
|
||||
test_all: shm
|
||||
@echo "=== Автотест POSIX SHM+SEM ==="
|
||||
@echo "=== Автотест POSIX SHM+SEM с файлами input.txt/output.txt ==="
|
||||
./server $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME) $(SERVER_ITERS) & \
|
||||
SRV=$$!; \
|
||||
sleep 1; \
|
||||
echo "abacaba" | ./client $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME) & \
|
||||
echo "kekekek" | ./client $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME) & \
|
||||
echo "foobar" | ./client $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME) & \
|
||||
wait; \
|
||||
./client $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME); \
|
||||
wait $$SRV
|
||||
|
||||
# Очистка
|
||||
# Очистка бинарников и файлов (IPC‑объекты чистит сам сервер). [file:21]
|
||||
clean:
|
||||
@echo "Очистка..."
|
||||
rm -f server client
|
||||
rm -f output.txt
|
||||
|
||||
help:
|
||||
@echo "Available targets:"
|
||||
@echo " shm - Build POSIX SHM+SEM programs"
|
||||
@echo " test_server - Run SHM+SEM server (clients in another terminal)"
|
||||
@echo " test_clients - Run several client processes"
|
||||
@echo " test_all - Automatic end-to-end test"
|
||||
@echo " test_server - Run SHM+SEM server (client in another terminal)"
|
||||
@echo " test_client - Run client reading input.txt"
|
||||
@echo " test_all - Automatic end-to-end test with input.txt/output.txt"
|
||||
@echo " clean - Remove built files"
|
||||
@echo " help - Show this help"
|
||||
|
||||
.PHONY: all shm test_server test_clients test_all clean help
|
||||
.PHONY: all shm test_server test_client test_all clean help
|
||||
|
||||
Reference in New Issue
Block a user