lab4 webserver

This commit is contained in:
2025-11-02 13:37:19 +01:00
parent 81af17d42c
commit 895958d058
12 changed files with 470 additions and 0 deletions

56
lab4/main.c Normal file
View File

@@ -0,0 +1,56 @@
/*
* Простой многопроцессный HTTP сервер с использованием fork()
*
* Компиляция: make
*
* Запуск: ./webserver <путь_к_папке> [порт]
* Примеры:
* ./webserver ./test-site
* ./webserver ./test-site 8080
*
* Остановка: pkill webserver
*
* Просмотр логов:
* sudo journalctl -f -t MY-WEB-SERVER
* sudo journalctl -f -t MY-WEB-SERVER --since "now" -p info
*
* Просмотр процессов:
* pstree -p $(pgrep -o webserver)
* ps aux | grep webserver
*/
#include "server.h"
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Usage: %s <www_root> [port]\n", argv[0]);
fprintf(stderr, "Example: %s ./test-site 13131\n", argv[0]);
return 1;
}
/* Преобразуем путь в абсолютный */
char abs_path[PATH_MAX];
if (realpath(argv[1], abs_path) == NULL) {
perror("Invalid path");
return 1;
}
int port = 13131;
if (argc > 2) {
port = atoi(argv[2]);
if (port <= 0 || port > 65535) {
fprintf(stderr, "Invalid port: %s\n", argv[2]);
return 1;
}
}
printf("Starting web server on port %d, serving %s...\n", port, abs_path);
server(abs_path, port);
return 0;
}