This commit is contained in:
2025-12-12 14:50:23 +07:00
parent 5e0da4e0cb
commit 8645cab6c5
4 changed files with 61 additions and 14 deletions

38
vlad/rgz/bad_service.sh Normal file
View File

@@ -0,0 +1,38 @@
#!/usr/bin/env bash
set -euo pipefail
target=/etc/systemd/system/fifo.service
USER="pajjilykk"
GROUP="pajjilykk"
WORKDIR="/home/pajjilykk/CLionProjects/CS-LABS/vlad/rgz"
EXECUTABLE="$WORKDIR/daemon"
tmp=$(mktemp)
trap 'rm -f "$tmp"' EXIT
cat > "$tmp" <<UNIT
[Unit]
Description=FIFO text processing daemon (systemd-managed)
After=network.target
[Service]
Type=simple
ExecStart=$EXECUTABLE pepep
User=$USER
Group=$GROUP
WorkingDirectory=$WORKDIR
KillSignal=SIGTERM
TimeoutStopSec=5s
KillMode=control-group
Restart=on-failure
RestartSec=1s
[Install]
WantedBy=multi-user.target
UNIT
sudo install -m 0644 "$tmp" "$target"
sudo systemctl daemon-reload
echo "Replaced \`$target\` with the predefined service unit."

View File

@@ -1,7 +1,7 @@
// fifo_client.c
// Клиент: читает входной файл, отправляет содержимое в FIFO_REQUEST,
// читает ответ из FIFO_RESPONSE, отделяет хвост "\nREPLACEMENTS:<n>\n",
// пишет обработанный текст в выходной файл и печатает число замен.
// читает ответ из FIFO_RESPONSE, отделяет "\nREPLACEMENTS:<n>\n",
// пишет обработанный текст в выходной файл и печатает количество замен.
#include <stdio.h>
#include <stdlib.h>

View File

@@ -1,15 +1,19 @@
// fifo_server_daemon.c
// Демон: читает из FIFO_REQUEST, обрабатывает текст,
// для каждой пары одинаковых подряд символов заменяет второй на пробел,
// всего не более max_replacements замен, пишет результат в FIFO_RESPONSE
// и дописывает "\nREPLACEMENTS:<n>\n". Логирует ошибки в syslog.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <signal.h>
#include <syslog.h>
#include <stdio.h> // fprintf
#include <stdlib.h> // malloc, free, exit, strtoll
#include <string.h> // strlen, strerror
#include <unistd.h> // read, write, close, unlink
#include <fcntl.h> // open, O_RDONLY, O_WRONLY
#include <sys/types.h> // типы
#include <sys/stat.h> // mkfifo
#include <errno.h> // errno
#include <signal.h> // signal, SIGINT, SIGTERM, SIGPIPE
#include <syslog.h> // syslog, openlog, closelog
#define FIFO_REQUEST "/tmp/fifo_request"
#define FIFO_RESPONSE "/tmp/fifo_response"
@@ -22,13 +26,16 @@ void signal_handler(int sig) {
running = 0;
}
// разбор неотрицательного long long
static long long parse_ll(const char *s) {
char *end = NULL;
errno = 0;
long long v = strtoll(s, &end, 10);
if (errno != 0 || end == s || *end != '\0' || v < 0) {
return -1;
}
return v;
}
@@ -176,7 +183,9 @@ int main(int argc, char *argv[]) {
char result[64];
snprintf(result, sizeof(result), "\nREPLACEMENTS:%lld\n", replacements);
write(fd_resp, result, strlen(result));
if (write(fd_resp, result, strlen(result)) < 0) {
syslog(LOG_WARNING, "write replacements trailer failed: %s", strerror(errno));
}
close(fd_resp);
syslog(LOG_INFO, "Response sent: %zd bytes; replacements=%lld",

View File

@@ -9,7 +9,7 @@ GROUP="pajjilykk"
WORKDIR="/home/pajjilykk/CLionProjects/CS-LABS/vlad/rgz"
EXECUTABLE="$WORKDIR/daemon"
tmp=$(mktemp)
wo
trap 'rm -f "$tmp"' EXIT
cat > "$tmp" <<UNIT