{"id":21966285,"url":"https://github.com/banditopazzo/sala-cinema","last_synced_at":"2026-04-18T04:01:55.460Z","repository":{"id":218085662,"uuid":"103278257","full_name":"banditopazzo/Sala-Cinema","owner":"banditopazzo","description":"Sistema di prenotazione di una sala cinema scritto in C per UNIX, Linux, macOS","archived":false,"fork":false,"pushed_at":"2017-09-12T14:12:11.000Z","size":14,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-03T19:37:39.026Z","etag":null,"topics":["cinema","multithread","multithreaded-tcp-server","operating-system","terminal-app","unix","unix-domain-socket","unix-socket"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/banditopazzo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-09-12T14:03:16.000Z","updated_at":"2017-10-09T14:04:59.000Z","dependencies_parsed_at":"2024-01-19T16:59:19.707Z","dependency_job_id":"f764e972-ad0e-46c0-9174-1d4bb58f6500","html_url":"https://github.com/banditopazzo/Sala-Cinema","commit_stats":null,"previous_names":["banditopazzo/sala-cinema"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/banditopazzo/Sala-Cinema","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/banditopazzo%2FSala-Cinema","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/banditopazzo%2FSala-Cinema/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/banditopazzo%2FSala-Cinema/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/banditopazzo%2FSala-Cinema/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/banditopazzo","download_url":"https://codeload.github.com/banditopazzo/Sala-Cinema/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/banditopazzo%2FSala-Cinema/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31955919,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cinema","multithread","multithreaded-tcp-server","operating-system","terminal-app","unix","unix-domain-socket","unix-socket"],"created_at":"2024-11-29T13:01:40.486Z","updated_at":"2026-04-18T04:01:55.437Z","avatar_url":"https://github.com/banditopazzo.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Progetto per corso di Sistemi Operativi - Università degli Studi di Roma \"La Sapienza\"\n### Sistema di prenotazione di una sala cinema scritto in C per UNIX, Linux, macOS.\n\nIl sistema composto da server e client, con funzioni di:\n* visualizzazione dei posti liberi\n* prenotazione di uno o più posti\n* cancellazione prenotazione possedendo un codice di prenotazione\n\n## Caratteristiche\n\n* ***Server Multiprocesso.***\nIl sistema è stato realizzato con un server multiprocesso, ovvero quando un client si connette\nil server genera un processo figlio che si occupa di gestire la connessione.\n\n* ***Semaforo per accesso al database.***\nE’ stato necessario quindi l’uso di un semaforo per la sincronizzazione dell’accesso al\ndatabase ed è stato usato un semaforo di tipo IPC Unix System V. Quando un processo che si\noccupa di gestire un client si trova nella sua sezione critica (accesso al database), gli altri\nprocessi che tentano di entrare nelle loro sezioni critiche vengono bloccati e fatti ripartire\nsolo quando il primo termina la sua sezione critica.\n\n* ***Comunicazione client/server.***\nLa comunicazione tra client e server avviene tramite sockets nel dominio AF_INET in\nmodalità connessione. I numeri interi vengono convertiti in uint32_t prima di essere inviati e\nripristinati all’arrivo.\n\n* ***Gestione dei principali segnali di terminazione, SIGPIPE e SIGCHLD.***\nQuando il server viene chiuso, il processo principale attende la chiusura dei processi figli per\npoi terminare anch’esso. Se i processi figli ricevono il segnale di terminazione mentre si\ntrovano nella propria sezione critica, la concludono prima di terminare. Il client o i processi\nfigli sul server vengono interrotti all’arrivo di un segnale SIGPIPE, notificando l’accaduto.\nQuando un processo figlio termina, invia un segnale SIGCHLD al padre che lo gestisce e fa\nterminare completamente il figlio evitando che nel sistema rimangano processi zombie. La\ngestione dei segnali avviene in modo affidabile tramite la struttura sigaction.\n\n* ***Strutture dati.*** I posti sono rappresentati con una struct formata da un carattere ad indicare\nla fila e un intero per il numero di poltrona. Le prenotazioni sono rappresentate con una struct formata\nda un elemento di tipo struct posto e un intero per il codice di prenotazione.\n\n* ***Database.***\nIl database si trova in nella cartella puntata dalla variabile d’ambiente $HOME ed è\nrealizzato come un insieme di prenotazioni. Possono esserci più prenotazioni con lo stesso\ncodice identificativo, ma solo una prenotazione per posto. La lettura o scrittura del database\navviene tramite le primitive a basso livello e la lettura avviene in RAM dinamica.\n\n## Mappa dei posti disponibili\n\n```\n       01 02 03 04 05        06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25        26 27 28 29 30\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n   A  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  A\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n   B  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  B\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n   C  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  C\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n   D  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  D\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n   E  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  E\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n   F  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  F\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n\n\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n   G  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  G\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n   H  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  H\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n   I  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦  ¦      ¦  ¦  ¦  ¦  ¦  ¦  I\n      +--+--+--+--+--+      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+      +--+--+--+--+--+\n       01 02 03 04 05        06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25        26 27 28 29 30\n\n\n\n\n                 +----------------------------------------------------------------------------------+\n                 |                                   S C H E R M O                                  |\n                 +----------------------------------------------------------------------------------+\n\n\n                                   +--+                                 +--+\n                                   ¦\u003e\u003c¦ OCCUPATO                        ¦  ¦ DISPONIBILE\n                                   +--+                                 +--+\n```\n\n\n## Come compilare e installare\n\n* Compilare:\n\n  `$ make`\n\n* Installare (necessari privilegi di amministratore):\n\n  `# make install`\n\n* Disinstallare (necessari privilegi di amministratore):\n\n  `# make uninstall`\n\n* Rimuovere programmi compilati:\n\n  `$ make clean`\n\n* Eliminare il database delle prenotazioni:\n\n  `$ make deletedatabase`\n\n\n## Come eseguire\n\n* Avviare il server:\n\n  `$ serverSD -p porta`\n\n* Avviare il client e connetterlo al server:\n\n  `$ clientSD -a indirizzo -p porta`\n\n* Stampare il contenuto del database sul terminale:\n\n  `$ stampadatabaseSD`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbanditopazzo%2Fsala-cinema","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbanditopazzo%2Fsala-cinema","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbanditopazzo%2Fsala-cinema/lists"}