Newsgroup: it.comp.lang.c
Titolo: Elaborato di Sistemi operativi

salve ragazzi..
mi è stato assegnato un elaborato di sistemi operativi e vorrei qualke
dritta..
la consegna è :
Implementare un meccanismo di prenotazione vacanze.
i client si interfacciano con un server che eroga il servizio di
prenotazione voli con pacchetti vacanze.
il server salva le transazioni in un file.
le agenzie di viaggio utilizzano il seguente algoritmo:
nessun volo senza pakketto vacanze associato se no si riparte l'
operazione da zero.
ci sono sconti per la prenotazioni degli ultimi posti in un volo .
i client sono tutti interessati allo sconto.
Da realizzare naturalmente in C.
Praticamente quindi attraverso i socket...che mi consigliate??TCP??o
UDP???
e come gestisco il resto?
Grazie in anticipo!

 
Forza che mica è poi chissa che...
Un pò di definizioni di strutture dati, un pò di funzioni per la 
prenotazione, la generazione degli elenchi e il salvataggio su file ecc ecc.
Non perderti d'animo il progetto non è troppo difficile.
Attento solo che più client possono cercare di comprare lo stesso 
pacchetto...
Per il momento mi fermo qui, se poi hai problemi più precisi, dopo che 
ti sarai sbattuto per bene per risolverli da solo, posta pure, che si 
cerca di risolverli insieme.
In bocca al lupo
Giuseppe


Accetto la critica ma ho postato solo per avere consigli pre-
immersione nel codice...cmq ci ho sbattuto un po ed ho impostato un
server e un client in tcp che per adesso si scambiano messaggi.
Ora..per fare quello che devo fare io..non capisco bene in che modo
devo fare dialogare server e client..attreverso semplici messaggi e
poi con scrittura su file?
La scrittura su file a transazione avvenuta la faccio fare al
server...poi la concorrenza la gestisco cn dei semafori?
Thanks.

 
Devi stabilire un piccolo protocollo per il dialogo, interpretare le 
richieste dal client e procedere di conseguenza ad aggiornare le tue 
strutture dati.
Attento che forse devono essere proprio transazionale!
Per la concorrenza, la scelta dei semafori mi pare proprio azzeccata :)
Ciao
Buon Lavoro

 server...poi la concorrenza la gestisco cn dei semafori?
Meglio di no, specie se sei agli inizi. Se la scalabilità non è tra i
requisiti puoi fare un unico main-loop che esegue la logica di business;
con la select rilevi quali client hanno inviato un messaggio e li servi
uno alla volta.
Luca
-- 
Software is like sex; it's better when it's free.
Linus Torvalds

Grazie per i consigli :)..
ho un dilemma da porvi...
per iniziare sto scrivendo un client e un server che si scambiano
semplici messaggi...
ora il punto è :
devo far vedere la dimostrazione dell' elaborato su un solo pc quindi
devo lavorare con localhost
domanda:
se utilizzo la famiglia AF_INET il server si mette in ricezione e fin
qui tutto ok..mentre il client arriva alla connect e mi restituisce -1
settando per entrembi localhost e porta 4000....uso un mac e il
firewall è disattivato.
se funzionasse utilizzando questo metodo posso far connettere piu
client sempre sulla stessa makkina in localhost??
o devo utilizzare la famiglia AF_UNIX cn i path unix?? (anche se io
preferirei il primo metodo)
Thanks!


Anche io utilizzerei il primo metodo.
Toglimi una curiosità ma dove studi?
Saluti
Giuseppe


Sono al secondo anno di Ingegneria Telematica a Enna interateneo con
Catania.
Saluti!!!

 
In bocca a lupo allora
Giuseppe

 Se è questo era proprio ben nascosto!
Se mi posso permettere secondo me non è un errore
non sono un esperto di C ma il cast da 32 a 16 bit è implicito
prova questo codice e te ne accorgi!!!
void main(void) {
        struct sockaddr_in s;
        printf("uint=%d int=%d\n",sizeof(unsigned int),sizeof(int));
        int i=0xffff234d;
        s.sin_port=htons(i);
        printf("normale=%x hton_out=%x sin_port
out=%x\n",i,htons(i),s.sin_port);
}
io consiglierei a Mandra di usare perror e stamparsi la variabile errno
(previa inclusione di apposito header file)
così può avere molte più info

Salve ragazzi..
allora ho provato a fare il cambiamento nella dichiarazione della
porta ma niente stesso problema..ora provo il consiglio di gigi con le
perror..
nel mentre vi posto il codice di server e client cosi che qualcuno lo
provi per vedere se è un mio problema o un problema del mio pc.
Vi posto i due file :
SERVER :
http://www.savefile.com/files/1376343
CLIENT :
http://www.savefile.com/files/1376351
Grazie in anticipo per il vostro aiuto.
Saluti!!

Non capisco quale sia il problema, almeno a prima vista funziona tutto 
correttamente.
Queste sono le risposte del server a due client che gli ho fatto connettere.
giuseppe@hermes:~/canc$ ./server
Creazione del socket..  [OK]
Associazione del socket all'indirizzo scelto...         [OK]
Attivazione ascolto di connessioni...   [OK]
In attesa di richieste...
Connessione in corso da 127.0.0.1, porta 57349.
 >> ciao
 >> bye
In attesa di richieste...
Connessione in corso da 127.0.0.1, porta 57350.
 >> ciao
 >> mondo
 >> bye
In attesa di richieste...
e queste sono le esecuzioni dei client:
giuseppe@hermes:~/canc$ ./client
Creazione del socket...         OK!
Connessione sulla porta 4000 di 127.0.0.1...    OK!
# ciao
# bye
giuseppe@hermes:~/canc$ ./client
Creazione del socket...         OK!
Connessione sulla porta 4000 di 127.0.0.1...    OK!
# ciao mondo
# # bye
cos'è che non va?
Saluti
Giuseppe


Allora il programma funziona cavolo...è il mio mac che blocca le
porte..anche se ho il firewall disattivato..infatti se provo a
connettere il client sulla porta 21 si connette ma non scambiano
dati..penso perkè il server su quella porta si connette si..ma
effettivamente nn riesce a interagire cn il client in quanto occupato
dal servizio ftp..qualke anina mia ke mi spieghi come fare ad aprire
manualmente delle porte libere su mac tiger ??
Grazie per l' aiuto.

 ad aprire manualmente delle porte libere su mac tiger ??
La porta 21 è riservata al servizio ftp.  È evidente che su quella 
macchina è già attivo un server (o il super server inetd/xinetd). 
Inoltre per usare le porte privilegiate (0÷1023) devi essere root.
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

Salve ragazzi..
alla fine dp vari sbattimenti ho risolto attraverso i PATH UNIX.
Grazie.