Acest proiect implementeaza o arhitectura client-server in Bash, bazata pe FIFO-uri (named pipes), pentru interogarea paginilor de manual Linux (man).
Clientul trimite o cerere catre server printr-un FIFO bine-cunoscut, iar serverul returneaza raspunsul intr-un FIFO dedicat clientului.
- Demonstrarea comunicarii inter-proces (IPC) folosind FIFO-uri.
- Separarea clara a rolurilor client/server.
- Configurarea parametrilor serverului prin fisier extern.
- Gestionarea concurenta a cererilor, prin FIFO-uri de raspuns per client.
Componente principale:
server.sh: porneste serverul, primeste cereri, parseaza formatul, ruleazaman, trimite raspunsul.client.sh: construieste cererea, o trimite serverului, asteapta raspunsul in FIFO-ul propriu.configServer.conf: defineste FIFO-ul bine-cunoscut (ex./tmp/server-fifo).
Flux de comunicare:
- Clientul creeaza FIFO-ul propriu:
/tmp/server-reply-<PID>. - Clientul trimite cererea in FIFO-ul serverului.
- Serverul valideaza cererea si extrage PID + comanda.
- Serverul scrie rezultatul
man <command>in FIFO-ul clientului. - Dupa citire, FIFO-ul clientului este sters.
Cererile sunt trimise in formatul:
BEGIN-REQ [client-pid: command-name] END-REQ
Unde:
client-pid: PID-ul procesului client.command-name: comanda Linux pentru care se cere pagina de manual.
- Sistem Linux (sau mediu compatibil POSIX).
- Bash.
- Utilitare standard:
mkfifo,cat,man.
Fisierul configServer.conf contine calea FIFO-ului serverului:
fifoServer=/tmp/server-fifo
- Acorda drepturi de executie:
chmod +x server.sh client.sh- Porneste serverul intr-un terminal:
./server.sh- Ruleaza clientul intr-un alt terminal:
./client.sh- Introdu o comanda Linux (ex.
ls,grep,ps) cand este solicitata.
Input client:
ls
Cerere transmisa:
BEGIN-REQ [12345: ls] END-REQ
Raspuns:
- Continutul paginii de manual pentru comanda solicitata (
man ls).
- Clientul verifica existenta FIFO-ului serverului inainte de trimiterea cererii.
- Serverul valideaza formatul cererii prin expresie regulata.
- FIFO-urile client sunt sterse dupa finalizarea comunicarii.
- Serverul ruleaza intr-o bucla infinita (fara mecanism de shutdown controlat).
- Nu exista timeout pentru citire/scriere pe FIFO.
- Nu sunt tratate explicit erorile comenzii
man(ex. comanda inexistenta).
- Adaugarea unui mecanism de oprire gratiata (semnale
SIGINT/SIGTERM). - Introducerea timeout-urilor pentru operatiile FIFO.
- Logging structurat pentru cereri si erori.
- Validare extinsa si mesaje de eroare mai descriptive catre client.
Pentru rulare prin Docker, vezi documentatia din README.Docker.md.