Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
NXTPAPER 60 Ultra è il primo smartphone con tecnologia NXTPAPER 4.0 per il display, un ampio IPS da 7,2 pollici. Con finitura anti-riflesso, processore MediaTek Dimensity 7400, fotocamera periscopica e modalità Max Ink per il detox digitale, NXTPAPER 60 Ultra punta a essere il riferimento tra gli smartphone pensati per il benessere degli occhi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-08-2005, 16: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, 20: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, 12: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, 14: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, 10: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 10:58.
viridovix1 è offline   Rispondi citando il messaggio o parte di esso
Old 18-08-2005, 16: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, 09: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, 16: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, 16: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, 16: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, 17: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, 09: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, 10: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, 08: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


Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Stuttering e freeze sui laptop da 3.000 ...
Government Data Intelligence for Agricul...
iPhone 17e limitato per non oscurare iPh...
Windows 11 può usare l'IA per cla...
Microsoft Edge diventa più sicuro...
Yakuza Kiwami 3: il nuovo trailer mostra...
Geely lo fa davvero: auto con garanzia a...
'Troppi videogiochi': ecco perché...
Videogiochi e TV aumentano la concentraz...
OneXFly Apex è la console portati...
Dati impressionanti: le auto autonome di...
Il folle esperimento: 12 modem 56K uniti...
Philips Sonicare 3100 in super offerta s...
Auto elettriche: dalla Cina il prototipo...
Più di 2.000 operai cinesi e fond...
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: 11:05.


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