Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-07-2002, 16:02   #1
huntercity
Senior Member
 
Iscritto dal: Jun 2001
Città: Pisa
Messaggi: 628
consiglio di implementazione

devo fare un progetto per l'università che mi si presenta
più difficile di quanto immaginassi
devo realizzare un software che mi tenga sincronizzate due directory su due macchine in rete, o anche sulla stessa macchina
del tipo sincronizza hostA:dir1 hostB:dir2

ho iniziato ad affrontare la fase progettuale e la mia idea era quella di crearsi una struttura dati con tutte le entry della directory e sottodirectory di dir 1 e di dir2 per poi andare a fare un confronto per vedere se matchavano i nomi dei file
Se matchano controllo le date per vedere chi è piu giovane e nel caso di dimensione uguale controllo l'MD5 e poi decido chi copiare da una parte all'altra
Se non matchano vuol dire che un file non esiste nell'altra directory e quindi lo copio direttamente

Ho due problemi
se in dir1 ci sono M elementi tra file e directory e in dir2 ci sono N elementri tra file e directory devo fare un controllo M*N che nel caso di tanti file è quasi improponibile

allora un mio amico mi ha detto di ordinare le due strutture e poi confrontare e in questo caso il confronto è un confronto lineare, ma ci devo mettere il tempo dell'ordinamento
quindi M+N+MlogM + NlogN
comunque è sempre meglio di N*M

voi direte tutto ok
e invece no
nel caso di non ordinamento per non avere problemi di memoria e per non dovermi sbattere ad usare le liste, la struttura che mi creavo sulle informazione di ogni entry (cioè nome_file, dataultimamodifica, dimensione e md5) le andavo a scrivere dentro un file e cosi risolvevo tutto
Se invece voglio usare l'ordinamento per usare QSORT ho bisogno di un'array ma mi si presenta il problema che dovrei dimensionarlo in modo statico e quindi non sempre va bene perchè potrei incontrare directory di dimensioni superiori a quanto io ho dimensionato il mio array

secondo voi ci sono altre alternative??

grazie

PS:lo so che è lungo e macchinoso ma se qualcuno ci capisce e mi rispondo gliene sono grato

ciao
huntercity è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2002, 22:31   #2
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Ciao ,
Perchè dovresti dimensionare l'array staticamente ? Non potresti usarne uno dinamico ? Avresti praticamente risolto i tuoi problemi

Che linguaggio stai usando ? ( a naso sembrerebbe C o C++ ... )
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2002, 00:19   #3
huntercity
Senior Member
 
Iscritto dal: Jun 2001
Città: Pisa
Messaggi: 628
Quote:
Originariamente inviato da /\/\@®¢Ø
[b]Ciao ,
Perchè dovresti dimensionare l'array staticamente ? Non potresti usarne uno dinamico ? Avresti praticamente risolto i tuoi problemi

Che linguaggio stai usando ? ( a naso sembrerebbe C o C++ ... )
sarebbe ottimo avere un array dinamico
ma come me lo creo??
eppoi con le dimensioni come la metto??
se mi capita di dover sincronizzare una directory con 6000 entry o di piu mi serve in memoria una array da paura
eppoi a priori non so quante entry devo creare come me lo creo l'array dinamicamente senza impiccarmi con le liste??

grazie

devo utilizzare C sotto linux
huntercity è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2002, 00:40   #4
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
In C lo puoi fare allocando della memoria 'grezza' con malloc.

Ad esempio se vuoi un array di 1000 interi puoi fare così

Codice:
int *x;
...
x = (int*) malloc( 1000*sizeof( int ) );
Ora x lo puoi usare come un normale array di interi. Nella chiamata ricordati di moltiplicare il numero di elementi che ti servono per la dimensione delle strutture che usi ( int nell'esempio, ma puoi sostituirlo con la struttura che vai ad usare )

quando hai finito di usare l'array liberi la memoria con una chiamata a free:

Codice:
free( x );
La memoria occupata non dovrebbe essere un grosso problema. Dipende da che informazioni poi memorizzi , supponendo circa 100 byte per nome del file, data/ora , dimensione etc., per 6000 files in una directory ti troveresti all'incirca 600kB di memoria occupata. Non mi sembra una quantita' enorme
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2002, 01:00   #5
huntercity
Senior Member
 
Iscritto dal: Jun 2001
Città: Pisa
Messaggi: 628
Quote:
Originariamente inviato da /\/\@®¢Ø
[b]In C lo puoi fare allocando della memoria 'grezza' con malloc.

Ad esempio se vuoi un array di 1000 interi puoi fare così

Codice:
int *x;
...
x = (int*) malloc( 1000*sizeof( int ) );
Ora x lo puoi usare come un normale array di interi. Nella chiamata ricordati di moltiplicare il numero di elementi che ti servono per la dimensione delle strutture che usi ( int nell'esempio, ma puoi sostituirlo con la struttura che vai ad usare )

quando hai finito di usare l'array liberi la memoria con una chiamata a free:

Codice:
free( x );
La memoria occupata non dovrebbe essere un grosso problema. Dipende da che informazioni poi memorizzi , supponendo circa 100 byte per nome del file, data/ora , dimensione etc., per 6000 files in una directory ti troveresti all'incirca 600kB di memoria occupata. Non mi sembra una quantita' enorme
non ci siamo capiti
lo so che in C con le malloc mi alloco memoria dinamica
il problema è che per esempio io non conosco il valore
di quanto devo allocare
nel senso che non conosco quel 10000
io uso una procedura sdir(char * nomedir)
che mi fà una opendir(nomedir) e poi inizia a leggere con le readdir le entry della directory, appena trova una entry che è una directory entra in ricorsione altrimenti devo memorizzare la entri nel mio array, solo che non so quante entry devo memorizzare poichè non so quante sono le sottodirectory e file che ci sono dentro

hai capito qual'è il mio problema?

potrei anche fare prima una routine tipo sdir che mi dice quanti sono le entry e poi alloco e faccio un'altra scansione ma in questo modo devo scandire il filesystem 2 volte, con il problema anche che nel frattempo puo darsi che qualcuno ha creato un nuovo file e quindi il mio numero di prima non è piu' buono e alloco un array che poi nella seconda passata non è sufficiente

ciao
huntercity è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2002, 11:07   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ma una lista ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2002, 11:44   #7
huntercity
Senior Member
 
Iscritto dal: Jun 2001
Città: Pisa
Messaggi: 628
Quote:
Originariamente inviato da cionci
[b]Ma una lista ?


mi tornerebbe male usare una lista, poichè vorrei
qualcosa di ordinato per fare piu infretta, a meno che le mie
considerazioni non siano sbagliate

io ho una situazione come in figura

devo sincronizzare le due directory sui due host
allora mi creo le due strutture di A e B

poi la mia idea era di lanciare un thread per ogni entry della struttura dell'hostA che controllasse tutte le entry dell'hostB per vedere se c'era corrispondenza o no
nel caso di corrispondenza controllavo data e ora per decidere chi era piu aggiornato, poi scrivo in una coda cosa devo fare (la coda verra processata dopo aver finito tutti i confronti)
ne caso di non corrispondenza scrivo nella coda di copiare il file nel rispetto host in cui non si trova

sicuramente non lancio i thread tutti in una volta perchè se ho 5000 file e lancio 5000 thread mi scoppia tutto, quindi ne lancio MAX_THREAD alla volta

facendo il confronto in questo modo ho una complessità di tipo MxN
invece avendo due strutture ordinate la complessità si riduce notevolmente in quanto non devo riscandirmi ogni volta in ogni thread la struttura dell'hostB e anzi credo che non ci servano neanche i thread in quanto mi sembra che la scansione sia di tipo lineare

il problema nasce dal fatto che per usare la QSORT devo avere un array da ordinare e purtroppo io non so come dimensionare l'array in quando non so la dimensione a priori, si potrebbero usare giustamente le liste ma in quel caso perdo l'ordinamento e quindi mi aumenta la complessità di calcolo

--------------------------------------------------------------------------

altro quesito
io le due strutture avevo intenzione di usarle tutte e due sull'hostA, nel senso che chiedo ad hostB di crearsi la struttura, poi me la faccio mandare via socket e quindi il confronto lo faccio direttamente su hostA senza a stare ogni volta a spedire via socket le richieste dei confronti
E' una buona idea oppure sbaglio?

---------------------------------------------------------------------------

chiusura del post chilometrico
secondo voi c'è un'altro modo per confrontare due directory??

grazie
huntercity è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2002, 11:50   #8
huntercity
Senior Member
 
Iscritto dal: Jun 2001
Città: Pisa
Messaggi: 628
Quote:
Originariamente inviato da huntercity
[b]

mi tornerebbe male usare una lista, poichè vorrei
qualcosa di ordinato per fare piu infretta, a meno che le mie
considerazioni non siano sbagliate

io ho una situazione come in figura

devo sincronizzare le due directory sui due host

Quindi :
mi creo le due strutture di A e B
poi la mia idea era di lanciare un thread per ogni entry della struttura dell'hostA che controllasse tutte le entry dell'hostB per vedere se c'era corrispondenza o no
nel caso di corrispondenza controllo data e ora per decidere chi era piu aggiornato, poi scrivo in una coda cosa devo fare (la coda verra processata dopo aver finito tutti i confronti)
ne caso di non corrispondenza scrivo nella coda di copiare il file nel rispettivo host in cui non si trova

sicuramente non lancio i thread tutti in una volta perchè se ho 5000 file e lancio 5000 thread mi scoppia tutto, quindi ne lancio MAX_THREAD alla volta

facendo il confronto in questo modo ho una complessità di tipo MxN
invece avendo due strutture ordinate la complessità si riduce notevolmente in quanto non devo riscandirmi ogni volta in ogni thread la struttura dell'hostB e anzi credo che non ci servano neanche i thread in quanto mi sembra che la scansione sia di tipo lineare

il problema nasce dal fatto che per usare la QSORT devo avere un array da ordinare e purtroppo io non so come dimensionare l'array in quando non so la dimensione a priori, si potrebbero usare giustamente le liste ma in quel caso perdo l'ordinamento e quindi mi aumenta la complessità di calcolo

--------------------------------------------------------------------------

altro quesito
io le due strutture avevo intenzione di usarle tutte e due sull'hostA, nel senso che chiedo ad hostB di crearsi la struttura, poi me la faccio mandare via socket e quindi il confronto lo faccio direttamente su hostA senza a stare ogni volta a spedire via socket le richieste dei confronti
E' una buona idea oppure sbaglio?

---------------------------------------------------------------------------

chiusura del post chilometrico
secondo voi c'è un'altro modo per confrontare due directory??

grazie
huntercity è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2002, 12:48   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
La lista la puoi ordinare comunque...anche se è un procedimento più lento di un QSORT...

Oppure fai la lista man mano che scorri le entry della dir...e ti conti le entry...

Finito questo processo ti puoi creare un array dalla lista ed ordinartelo come vuoi...

PS: la gif non si vede...errore 404...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2002, 13:00   #10
huntercity
Senior Member
 
Iscritto dal: Jun 2001
Città: Pisa
Messaggi: 628
Quote:
Originariamente inviato da cionci
[b]La lista la puoi ordinare comunque...anche se è un procedimento più lento di un QSORT...

Oppure fai la lista man mano che scorri le entry della dir...e ti conti le entry...

Finito questo processo ti puoi creare un array dalla lista ed ordinartelo come vuoi...

PS: la gif non si vede...errore 404...
come idea non è male
io avevo pensato anche ad un file
nel senso che invece di crearmi una lista le info le scrivevo
nel file e poi usavo SORT, solo che è programma di linux e non so se il prof si incazza

PS:adesso l'immagine va
huntercity è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2002, 15:55   #11
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Quote:
Originariamente inviato da huntercity
[b]

non ci siamo capiti
lo so che in C con le malloc mi alloco memoria dinamica
il problema è che per esempio io non conosco il valore
di quanto devo allocare
nel senso che non conosco quel 10000
Ok scusami !
Potresti allocarne uno con una prefissata una dimensione iniziale ( per 100 elementi ad esempio ), e controllarne quanto ne usi. Quando la riempi, con realloc aumenti le dimensioni ( le raddoppi ad esempio ) e continui nel nuovo spazio.
ad esempio per leggere un numero precisato di interi
Codice:
int size,i;
int *x;

i=0;
size = 100;
x=malloc( size*sizeof(int) );
while( /* ci sono ancora valori da leggere */ )
{
  if ( i == size )
   {
      size*=2;
      x = realloc( x , size * sizeof(int) );
   }
   x[ i++] = "prossimo intero letto";
}
Non l'ho provato, ma la cosa dovrebbe funzionare...
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
Sembra ormai certo: la prossima Xbox sar...
“Solutions Beyond Displays”: la strategi...
La società europea The Exploratio...
Dalle auto ai robot umanoidi: Faraday Fu...
Vodafone annuncia la dismissione di un s...
Stiga lancia i nuovi robot tagliaerba co...
Bullismo e cyberbullismo, Keenetic lanci...
Con AI Skills Checker Bitdefender mette ...
E-bike giapponese con 1.000 km di autono...
Un eVTOL con cui basta saper andare in b...
Dal mercato cinese al mondo: HONOR firma...
Sovranità digitale: l'UE sperimen...
Accesso alla memoria su Windows 11 solo ...
iPhone 18 Pro Max con batteria da oltre ...
Windows 11, cali di prestazioni sulle GP...
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: 07:32.


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