Untitled
unknown
plain_text
a year ago
2.7 kB
6
Indexable
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #define MAX_KEY_LEN 256 #define MAX_VALUE_LEN 1024 #define MAX_REQUEST_LEN (MAX_KEY_LEN + MAX_VALUE_LEN + 10) // 10 для команды и разделителей // Структура для хранения данных typedef struct { char key[MAX_KEY_LEN]; char value[MAX_VALUE_LEN]; } KeyValuePair; // Простейшая хеш-таблица KeyValuePair database[1000]; int database_size = 0; // Функция для поиска значения по ключу char* get_value(char* key) { for (int i = 0; i < database_size; ++i) { if (strcmp(database[i].key, key) == 0) { return database[i].value; } } return "Key not found"; } // Функция для установки значения по ключу void set_value(char* key, char* value) { strcpy(database[database_size].key, key); strcpy(database[database_size].value, value); database_size++; } // Функция для обработки запросов от клиентов void handle_client(int client_fd) { char request[MAX_REQUEST_LEN]; char key[MAX_KEY_LEN]; char value[MAX_VALUE_LEN]; // Чтение запроса от клиента read(client_fd, request, sizeof(request)); sscanf(request, "%s %s", key, value); // Обработка запроса и отправка ответа if (strcmp(request, "GET") == 0) { char* result = get_value(key); write(client_fd, result, strlen(result) + 1); } else if (strcmp(request, "SET") == 0) { set_value(key, value); write(client_fd, "Value set", 10); } else { write(client_fd, "Invalid command", 15); } close(client_fd); } int main() { mkfifo("server_fifo", 0666); int server_fd = open("server_fifo", O_RDONLY); if (server_fd == -1) { perror("Server FIFO"); exit(EXIT_FAILURE); } while (1) { int client_fd = accept(server_fd, NULL, NULL); if (client_fd == -1) { perror("Accept"); continue; } // Создание нового процесса для обработки клиента pid_t pid = fork(); if (pid == 0) { // Дочерний процесс handle_client(client_fd); exit(EXIT_SUCCESS); } else if (pid < 0) { // Ошибка при создании процесса perror("Fork"); } close(client_fd); } close(server_fd); unlink("server_fifo"); return 0; }
Editor is loading...
Leave a Comment