https://github.com/0marrkvi0/simpleshell_spaasm
Simple shell written in C using OS system calls, with integrated client-server communication. (subject_SPAASM)
https://github.com/0marrkvi0/simpleshell_spaasm
client-server os shell
Last synced: about 1 month ago
JSON representation
Simple shell written in C using OS system calls, with integrated client-server communication. (subject_SPAASM)
- Host: GitHub
- URL: https://github.com/0marrkvi0/simpleshell_spaasm
- Owner: 0MarrkvI0
- Created: 2025-06-20T13:51:17.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-20T13:59:52.000Z (about 1 year ago)
- Last Synced: 2025-06-20T14:41:58.904Z (about 1 year ago)
- Topics: client-server, os, shell
- Language: C
- Homepage:
- Size: 0 Bytes
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Shell & Networking Simulator - SPAASM FIIT STU LS 2024/25
**Autor:** Martin Kvietok
**Subject:** System Programming and Assemblers
**Faculty:** Fakulta informatiky a informačných technológií, STU Bratislava
---
## Popis projektu
Tento Unix-based program je jednoduchý **shell s podporou špeciálnych znakov**, ktorý zároveň umožňuje **simuláciu sieťovej komunikácie** medzi klientom a serverom. Shell umožňuje spúšťať príkazy, pracovať s rúrami a presmerovaniami, zatiaľ čo klient-server časť umožňuje posielanie správ, ktoré server prevádza na **veľké písmená** a vracia ich späť klientom.
---
## Funkcionalita
### Shell
- Podpora príkazov ako v klasickom Unix shelli
- Spracovanie špeciálnych znakov: `#`, `;`, `<`, `>`, `|`, `\`
- Prispôsobený prompt: používateľské meno, hostname a aktuálny čas
- Spustenie programov cez `fork()` a `execvp()`
- Presmerovanie vstupu/výstupu, pipy
### Klient–Server simulácia
- Server prijíma text, prevádza ho na **uppercase** a vracia klientovi
- Detekuje a ošetruje odpojenie klienta
- Klient sa pripája k serveru a odosiela vstup
- Pracuje s IP, portmi aj UNIX socketmi (`-p`, `-i`, `-u`)
---
## Spustenie
```bash
./shellnet -s -p 5000 # Spustenie servera na porte 5000
./shellnet -c -i 127.0.0.1 # Pripojenie klienta k serveru cez IP
./shellnet -h # Zobrazí nápovedu
```
---
## Implementácia
- **Jazyk:** C (GCC)
- **Platforma:** Unix/Linux
- **Makefile:** Vlastný, na jednoduchú kompiláciu
- **Knižnice a volania:**
- `fork()`, `execvp()`, `dup2()`, `wait()` – shell
- `socket()`, `bind()`, `listen()`, `accept()`, `connect()`, `read()`, `write()` – sieť
---
## Predpoklady
- Jeden typ spojenia (`-p`, `-u`, alebo `-i`) na jedno spustenie
- Shell aj sieťová vrstva fungujú súbežne
- Vstupné príkazy musia byť dostupné v systéme (`$PATH`)
- Klient/server bežia na tom istom alebo dostupnom systéme
---
## Algoritmy a techniky
- **Parser:** Vlastný, pre spracovanie špeciálnych znakov a príkazových argumentov
- **Sieťová slučka:** Čaká na vstup, prevedie text na veľké písmená, pošle späť
- **Modularita:** `shell.h`, `server_utils.h`, `client_utils.h` – každá časť má vlastný súbor