Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Abbiamo provato il nuovo HUAWEI Pura 80 Pro. Parliamo di uno smartphone che è un vero capolavoro di fotografia mobile, grazie ad un comparto completo in tutto e per tutto, In questa colorazione ci è piaciuto molto, ma i limiti hardware e software, seppur in netto miglioramento, ci sono ancora. Ma HUAWEI ha fatto davvero passi da gigante per questa nuova serie Pura 80. Buona anche l'autonomia e soprattutto la ricarica rapida sia cablata che wireless, velocissima.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-08-2005, 17:16   #1
viridovix1
Junior Member
 
Iscritto dal: Jul 2005
Messaggi: 15
[C]matrice statica,dinamica,memoria condivisa

Sistema Suse 9.2, linguaggio C , compilatore gcc.
Ho realizzato un sistema di prenotazione posti per una sala cinematografica, con un processo su una macchina server che gestisce la mappa dei posti.
Ogni posto è caratterizzato da numero di fila, numero di poltrona e da un flag che indica se il posto è prenotato o meno.
Il server accetta e processa sequenzialmente le richieste prenotazioni di posti da uno o piu' client che possono essere sulla stessa macchina o in remoto(quindi macchine diverse).

Come struttura ho utilizzato una matrice statica [3][3]
Con un unico client funziona tutto perfettamente , ma quando si connette un secondo client ,questo visualizza una matrice che nn tiene conto delle prenotazioni effettuate dal primo client, e la stessa cosa vale per il primo client.
Quindi i vari client nn fanno riferimento alla stessa matrice
All'inizio pensavo che dipendesse dalla posizione dell chiamata alla funzione inizializza(cinema) , ma quando il secondo client si connette questa nn dovrebe essere chiamata.

Ecco il codice del main del server:

Codice:
//main server
int main(int argc,char *argv[])
{
  char scelta[1];
  char out[MAX_DIM];
  char buff[MAX_DIM];
  int ds_sock,/*ds_sock_acc,*/ret,lenght;
  struct sockaddr_in server;
  struct sockaddr client;
  struct posto cinema[3][3];
  //
  inizializza_cinema(cinema);
  //
  system("clear" );
    //qui ho omesso il codice del socket x snellire la lettura del testo

  printf("in attesa di connessione da parte del client!!\n\n" );
  //
    //
  while(1)
    { 
      while((ds_sock_acc=accept(ds_sock,&client,&lenght)) ==-1);
      printf("client connesso!!\n\n" );
      if (fork()==0)
        { close(ds_sock);
               do
           
                 { strcpy(out," ");
     read(ds_sock_acc,buff,MAX_DIM);
//                   scelta=buff;
                   if ((strcmp(buff,"A")==0)||(strcmp(buff,"a") ==0))
                        {   posti_vuoti(cinema);
                            //printf("%s\n",buff);
                        }
                   else if ((strcmp(buff,"B")==0)||(strcmp(buff,"b") ==0))
                    { 
                     controllo_posto(cinema);
                     } 
    
    else if ((strcmp(buff,"C") ==0)||(strcmp(buff,"c") ==0))
                 { 
                     annulla_posto(cinema);
                   }
             else     if((strcmp(buff,"D") ==0)||(strcmp(buff,"d") ==0))
                        {  strcpy(out,"fatto");
                        }

                  }//relativa al do
                 while (strcmp(out,"fatto") !=0);
//
                write(ds_sock_acc,"\n\nArrivederci!!",20);
                close(ds_sock_acc);
                printf("Client disconnesso!!\n\n");
                printf("\nIn attesa di connessione da nuovo client!!\n\n");
                exit(0);

            }//della fork
          else close(ds_sock_acc); //è del fork==0

       }//del while(1)
}//del main
La struttra posto l'ho definita cosi

struct posto
{
unsigned char idPosto[6];
int flag;
};

la funzione inizializza_cinema
Codice:
void inizializza_cinema(struct posto cine[3][3])
{
 unsigned char i,j,k;
 k='1';
 for(i='A';i<='C';i++)
  {
    //printf("\n");
    for(j='1';j<='3';j++)
     {
       cine[i-'A'][j-'1'].flag=0;
       cine[i-'A'][j-'1'].idPosto[0]=' ';
       cine[i-'A'][j-'1'].idPosto[1]=i;
       cine[i-'A'][j-'1'].idPosto[2]=j;
       cine[i-'A'][j-'1'].idPosto[3]=' ';
       cine[i-'A'][j-'1'].idPosto[4]='\t';
       cine[i-'A'][j-'1'].idPosto[5]='\0';
     }
     cine[i-'A'][2].idPosto[4]='\n';
   }
Non ben chiaro come procedere per risolvere. Se usare una matrice dinamica (ho il problema che la matrice l'ho dichiarata di tipo posto), memoria condivisa o tutte e due.
Spero che la discussione troppo lunga nn spaventi e che qualcuno riesca ad aiutarmi.
viridovix1 è offline   Rispondi citando il messaggio o parte di esso
Old 16-08-2005, 21:58   #2
v1ruz
Senior Member
 
L'Avatar di v1ruz
 
Iscritto dal: Nov 2004
Città: $HOME
Messaggi: 1213
hai provato ad utilizzare un mutex per l'accesso al cinema?
v1ruz è offline   Rispondi citando il messaggio o parte di esso
Old 17-08-2005, 13:26   #3
viridovix1
Junior Member
 
Iscritto dal: Jul 2005
Messaggi: 15
il fatto è che la matirce è statica, x usare un mutex dovrei memorizzare la matrice statica su memoria condivisa, mumble...
viridovix1 è offline   Rispondi citando il messaggio o parte di esso
Old 17-08-2005, 15:24   #4
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Prescindendo dal codice che hai riportato (che non ho letto, so' troppo stanco... ), se vuoi che un client veda le modifiche apportate dagli altri credo tu abbia solo tre possibili soluzioni:

1) usare la memoria condivisa tra processi concorrenti, e quindi prevedere dei meccanismi di sincronizzazione tra i vari processi (semafori);
1-bis) usare la memoria condivisa e rinunciare alla concorrenza dei processi (gestendo un client per volta per evitare l'onere della sincronizzazione);
2) fare uso di altri sistemi di IPC (ad es. scambio di messaggi), cosa che pero' introdurrebbe il problema della gestione della coerenza dei dati.
__________________
gica78r@ncc-1701:~$ tar -c
tar: Codardamente mi rifiuto di creare un archivio vuoto
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 18-08-2005, 11:56   #5
viridovix1
Junior Member
 
Iscritto dal: Jul 2005
Messaggi: 15
[quote=Gica78R]Prescindendo dal codice che hai riportato (che non ho letto, so' troppo stanco... ), se vuoi che un client veda le modifiche apportate dagli altri credo tu abbia solo tre possibili soluzioni:

1) usare la memoria condivisa tra processi concorrenti, e quindi prevedere dei meccanismi di sincronizzazione tra i vari processi (semafori);

Ecco appunto usare la memoria condivisa con un semaforo mutex.
Il server con il codice attuale accetta connessioni da piu' client contemporaneamnete (server concorrente) , e dovrebbe processare pero' le richieste di prenotazione sequenzialmente.
Il fatto è che nn so bene come modificare il codice x memorizzare la matrice in memoria condivisa. LA posso lasciare statica??
Penso che nel codice main del server debba creare la porzione di memoria condivisa e il semaforo(e settarlo), poi associarla nel codice che genera il figlio e sempre qui mettere le chiamate che blocchino e sblocchino il semaforo.
Dunque il problema rimane come spiattellare la matrice in memoria condivisa e poi passarla con la send o write ai client.
Con il codice attuale la matrice ripeto è statica e una volta nizializzata le varie prenotazioni sono memorizzate in un vettore idposto[6] in modo da passarle con la send.

la matrice l'ho definita cosi

struct posto
{ unsigned char idPosto[6];
int flag; // indica con 0 posto libero, con 1 prenotato
}

struct posto cinema[3][3];

ad ogni elemento della matrice è assegnato un vettore idPosto e un flag
Nel vettore quindi è memorizzato ad esempio

(spazio vuoto) 'A' 1' (spazio vuoto) (il tabulatore'\') '\0' vale x i posti liberi

'[' 'A' '1' ']' '\' '0' vale x posto prenotato chiuso tra parentesi

Ultima modifica di viridovix1 : 18-08-2005 alle 11:58.
viridovix1 è offline   Rispondi citando il messaggio o parte di esso
Old 18-08-2005, 17:24   #6
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Per i semafori guarda qui: http://www.lilik.it/~mirko/gapil/gap...8-24500012.2.5

mentre per la memoria condivisa, qui: http://www.lilik.it/~mirko/gapil/gap...6-24600012.2.6

Sono link alla versione on-line di GaPiL, puoi scaricare anche la versione pdf; e' molto ben fatta

Ciao
__________________
gica78r@ncc-1701:~$ tar -c
tar: Codardamente mi rifiuto di creare un archivio vuoto
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2005, 10:39   #7
viridovix1
Junior Member
 
Iscritto dal: Jul 2005
Messaggi: 15
TI ringrazio molto ben realizzata, pero' mi rimane il problema di come memorizzarci la matrice(statica)
viridovix1 è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2005, 17:22   #8
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da viridovix1
TI ringrazio molto ben realizzata, pero' mi rimane il problema di come memorizzarci la matrice(statica)
Ehm... esattamente, cos'e' una matrice statica?
Dipende per caso dalla zona di memoria in cui e' allocata? Cioe' nello heap e non nello stack? Sinceramente non ho idea di dove venga allocato lo spazio per la memoria condivisa...
__________________
gica78r@ncc-1701:~$ tar -c
tar: Codardamente mi rifiuto di creare un archivio vuoto
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2005, 17:30   #9
Ginogino
Senior Member
 
Iscritto dal: Dec 1999
Città: Roma
Messaggi: 143
Quote:
Originariamente inviato da viridovix1
Sistema Suse 9.2, linguaggio C , compilatore gcc.
Ho realizzato un sistema di prenotazione posti per una sala cinematografica, con un processo su una macchina server che gestisce la mappa dei posti.
Ogni posto è caratterizzato da numero di fila, numero di poltrona e da un flag che indica se il posto è prenotato o meno.
Il server accetta e processa sequenzialmente le richieste prenotazioni di posti da uno o piu' client che possono essere sulla stessa macchina o in remoto(quindi macchine diverse).

Non ben chiaro come procedere per risolvere. Se usare una matrice dinamica (ho il problema che la matrice l'ho dichiarata di tipo posto), memoria condivisa o tutte e due.
Spero che la discussione troppo lunga nn spaventi e che qualcuno riesca ad aiutarmi.


Per curiosità, non è che a settembre dovrai affrontare un certo professor Quaglia?


BYeZzzZ
__________________
"Il piacere non è peccato se goduto con moderazione" Lorenzo Valla - "Masturbarsi fa male alla memoria e a tante altre cose che ora non ricordo"
Ginogino è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2005, 17:41   #10
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da Ginogino
Per curiosità, non è che a settembre dovrai affrontare un certo professor Quaglia?


BYeZzzZ
Quaglia??? De "La Sapienza"??? Quando facevo il primo anno di ing. Informatica era l'assistente di Ciciani... Un giorno, all'inizio di giugno (ultime lezioni), Ciciani disse: "Quaglia questa settimana non c'e'!", e un mio amico, dalle retrovie, urlo': "E' periodo di migrazione: e' volato in un paese piu' freddo!"
__________________
gica78r@ncc-1701:~$ tar -c
tar: Codardamente mi rifiuto di creare un archivio vuoto
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2005, 18:09   #11
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da Gica78R
Ehm... esattamente, cos'e' una matrice statica?
Dipende per caso dalla zona di memoria in cui e' allocata? Cioe' nello heap e non nello stack? Sinceramente non ho idea di dove venga allocato lo spazio per la memoria condivisa...
se quello che sto studiando su stack ed heap non è reso vano dalla mia ottusaggine,non dipende dalla zona di memoria in cui viene allocata se va a finire nello stack o nell'heap,ma dipende se è un "valore tipo" o se è "un valore riferimento".
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 10:30   #12
Ginogino
Senior Member
 
Iscritto dal: Dec 1999
Città: Roma
Messaggi: 143
Quote:
Originariamente inviato da Gica78R
Quaglia??? De "La Sapienza"??? Quando facevo il primo anno di ing. Informatica era l'assistente di Ciciani... Un giorno, all'inizio di giugno (ultime lezioni), Ciciani disse: "Quaglia questa settimana non c'e'!", e un mio amico, dalle retrovie, urlo': "E' periodo di migrazione: e' volato in un paese piu' freddo!"

Migrando migrando è diventato professore da un paio di anni o poco più, immagino.

Comunque è un bravo ragazzo. Un po flashato, ma gli ammmmmmolla

BBella ingegnè!

Byezzz
__________________
"Il piacere non è peccato se goduto con moderazione" Lorenzo Valla - "Masturbarsi fa male alla memoria e a tante altre cose che ora non ricordo"
Ginogino è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 11:12   #13
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da Ginogino
BBella ingegnè!
Seeeeeeeeeeeee..... Magara! Sto ancora a carissimo amico
__________________
gica78r@ncc-1701:~$ tar -c
tar: Codardamente mi rifiuto di creare un archivio vuoto
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2005, 09:27   #14
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Per matrice statica, e in generale per dati statici, nel gergo s'intende non allocata dinamicamente: la struttura è "allocata" tutta in una volta in fase di caricamento dell'eseguibile.

Comunque la soluzione al problema secondo me è di definire una macchina che faccia da server, e che quindi memorizzi i dati in qualche modo, in modo che tutte le richieste di accesso ai dati vengano "centralizzate" (tramite delle API opportunamente definite).

Un'altra soluzione potrebbe essere quella di mettere su un server database condiviso da tutti i client. Quindi non esistono server, e tutte le applicazioni sono dei client. Il problema, in questo caso, è garantire la coerenza per quanto riguarda l'assegnazione dei posti, in modo da garantire che lo stesso posto venga prenotato da più persone.
La soluzione al problema è quella di usare un database che consenta di effettuare delle transazioni. Una transazione è una sequenza di operazioni (su un database in genere) che, una volta "chiusa", garantisce l'esecuzione di TUTTE le operazioni o di NESSUNA.
Mio consiglio personale è quello di usare un database come FireBird (open source / aggratis ), che è molto solido e che permette non solo di gestire le transazioni, ma di scrivere procedure SQL che fanno tutto il lavoro. Ad esempio, è possibile scrivere una procedura "PrendiPosto", che si occupa di eseguire tutti i controlli e di assegnare il posto (o anche i posti): per i client è sufficiente chiamarla (come se fosse un comando SQL) e basta; pensa a tutto lei; e, grazie alle transazioni, se va in porto la chiamata si ha la garanzia che soltanto la nostra applicazione è riuscita a modificare QUEI particolari record "toccati" dall'operazione e nessun'altra.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
Oltre 55.000 dollari solo per il raffred...
Microsoft e tecnologia immorale: i dipen...
Come stanno andando Fastweb e Vodafone d...
Huawei presenta i nuovi eKit: soluzioni ...
Rockstar spiega i licenziamenti degli sv...
Il "concert phone" definitivo ...
Nintendo punta sul cinema: dopo Mario, a...
Insta360 X4 Air in prova: registra a 360...
PlayStation Portal: arriva lo Streaming ...
iPad Air 13'' (M2) in offerta: sconto di...
Schiaffo al copyright: utilizzare materi...
realme GT 8 Pro porta le fotocamere inte...
JBL Clip 5 a soli 39€ su Amazon: lo spea...
Apple pronta a pagare 1 miliardo l'anno ...
Apple non dimentica gli iPhone più...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v