Domande sul ModuloDue (apertura del database)
In questa pagina potete
porre domande sul
ModuloDue.
Vi prego di inserire un titolo che chiarisca che tipo di domanda state ponendo.
Handle è....
L'handle, che dalle specifiche sembra un intero ritornato dalla funzione
OpenDataBasefile(), in realtà cos'è?
--
FabioFossati - 05 Apr 2006
Re: Handle è....
E' un intero, che dovete usare come "abbreviazione" per indicare di quale dei database aperti si tratta.
Cioè dovete mantenere in memoria una tabella di strutture dati che contengono le informazioni dei databases che sono stati aperti, e usare l'handle per indicare di quale dei databases contenuti nella tabella si tratta.
--
AndreaSterbini - 05 Apr 2006
Ma queste due funzioni le dobbiamo creare noi?
--
EmanueleGallo - 05 Apr 2006
Ancora sull'handle
Che valore dell'handle bisogna tornare? Cioè va calcolato in qualche maniera particolare?
--
EmanueleGallo - 05 Apr 2006
Troncamento nome
Che senso ha fare questo. "La lunghezza totale del nome viene troncata a DBF_NAME_LENGTH caratteri e viene aggiunta l'estensione DBF_EXTENSION". Noi già sappiamo che un file più lungo di DBF_NAME_LENGTH non può esistere. Passandogli un nome più lungo alla
OpenDatabaseFile() ci dirà che quel database non esiste (quindi diciamo che questo controllo è intrinseco).
--
EmanueleGallo - 05 Apr 2006
Return degli Errori
Quali eventi si devono verificare affinché debba tornare i seguenti errori?
LPC_FILE_ACCESS File non accessibile (file non esistente è chiaro)
LPC_ERR_READ Errore di lettura file
LPC_ERR_SEEK Errore di spostamento su file
Negli esempi di
LPCGestioneErrore() non c'è nessun riferimento a questi.
Grazie.
--
EmanueleGallo - 05 Apr 2006
GetDBFInfo"> Re: isDBFHandle e GetDBFInfo
Certo, voi dovete creare le 5 funzioni:
- IsDBFHandle
- GetDBFInfo
- OpenDatabaseFile
- CloseDatabaseFile
- GetFieldInfo
--
AndreaSterbini - 05 Apr 2006
Re: Ancora sull'handle
Quando si apre un database ci si deve ricordare alcune informazioni.
L'implementazione interna della struttura dati che contiene queste informazioni deve rimanere nascosta (per ragioni di buona programmazione e modularizzazione).
In questa struttura dati usate un numero intero come chiave per trovare le informazioni relative ad uno dei database aperti.
Lo handle è la chiave che dovete utilizzare per trovare le informazioni.
--
AndreaSterbini - 05 Apr 2006
Re: Troncamento nome
No, fate il controllo come avete fatto per la CreateDatabase
--
AndreaSterbini - 05 Apr 2006
Re: Return degli Errori
Gli esempi non sono esaustivi ... implementate voi la gestione corretta di questi errori.
Ad esempio l'errore di LPC_ERR_SEEK può capitare quando dovete rimettere a posto la posizione corrente nel file del database (che va mantenuta sul record corrente) quando si fa una GetDBFInfo ... se vi sbagliate a fare il conto dell'offset da dare alla fseek.
Invece LPC_ERR_READ può capitare se il file è stato scritto in maniera errata (troppo corto) e fate una fread che dà errore.
--
AndreaSterbini - 05 Apr 2006
Re: Ancora sull'handle
Ok grazie. Ma le informazioni di questa struttura dati devono essere in qualche modo gestite dalla
OpenDatabase()? Oppure la
OpenDatabase() si preoccupa solo di assegnare il valore handle?
--
EmanueleGallo - 05 Apr 2006
Re: Re: Ancora sull'handle
Devono essere create e mantenute dalle funzioni del modulo, Open Close etc. Quali informazioni memorizzare è a vostra discrezione.
--
GianniCampanile - 06 Apr 2006
Test 4 e 5 invertiti
Salve, ho notato che chiamando il test numero 4 parte il 5 e viceversa. Non ho modificato il sorgente.
--
PaoloParlapiano - 05 Apr 2006
Posizionamento dopo l'header
Un'altra domanda poi. Come faccio a capire quanti byte dovrò spostarmi per posizionarmi appena dopo l'header?
--
EmanueleGallo - 05 Apr 2006
Re: errore assurdo
gentile prof. sono andato a dare un'occhiata ai test e ho visto che in uno dei test quello sulla
GetFieldInfo che il nome campo
PopOI dovrebbe
dare un errore per nome errato... non ho capito bene perche', visto che rispetta le specifiche di lunghezza, caratteri di cui deve essere fatto ecc.
--
MarcoLaVecchia - 05 Apr 2006
Re: Posizionamento dopo l'header
"Posizionarsi dopo l'header" vuol dire che se l'header è lungo 100bytes allora dovete posizionarvi al byte 101. Calcolare la lunghezza dell'header dovrebbe essere facile.
--
GianniCampanile - 05 Apr 2006
Re: Re: errore assurdo
Semplicemente perché quel campo non esiste...
--
GianniCampanile - 05 Apr 2006
Re: Test 4 e 5 invertiti
Ha ragione. Ho inserito un commento nelle NOTE del modulo 2.
Grazie
--
GianniCampanile - 05 Apr 2006
errore valore handle
Salve professore, ho notato che nelle specifiche c'è scritto che l'handle è un intero che va da 0 a MAX_DBF_OPEN....ma perchè allora nel test della funzione
CloseDBF quando si testa la funzionalità viene passato un valore di handle= -1???? il mio test ovviamente dice che questo valore è errato quando invece dovrebbe tornare LPC_OK sbaglio qualcosa???
--
MatteoSignorini - 06 Apr 2006
Re: errore valore handle
Inizialmente l'handle vale -1, poi viene assegnato da una funzione Open.
--
GianniCampanile - 06 Apr 2006
Re: errore valore handle
Io vedo che nella
CloseDBF c'è questa istruzione:
ret =
CloseDatabaseFile(9);
Dov'è che passa -1?
--
EmanueleGallo - 06 Apr 2006
Re: Re: errore valore handle
ret=CloseDatabaseFile(9) non è il test della funzionalità, quello della funzionalità è ret=CloseDatabaseFile(handle) dove handle è static int handle=-1;
--
MatteoSignorini - 06 Apr 2006
Re: Re: errore valore handle
Ok ora l'ho visto. Credo che siccome sia dichiarata static ogni volta che richiamano le nostre funzioni il valore viene mantenuto. Almeno credo sia così.
--
EmanueleGallo - 06 Apr 2006
Re: Re: Re: errore valore handle
Ho risposto sopra: handle inizialmente vale -1 poi viene assegnato dalla Open.
--
GianniCampanile - 06 Apr 2006
Conversione valori di handle
Ma i valori che andiamo a scrivere nella struttura che gestisce gli handle devono essere convertiti anche loro in Network Byte Order o bisogna lasciarli così come sono?
--
EmanueleGallo - 06 Apr 2006
Re: Conversione valori di handle
Le strutture interne le gestite voi e il formato è a vostra scelta; scegliete quello più comodo.
--
GianniCampanile - 06 Apr 2006
Decodifica informazioni della GetDBFInfo
Nelle specifiche è scritto: "La
GetDBFInfo() deve leggere la parte fissa dell'header e decodificare le informazioni numeriche riportandole da Network a Host Byte Order". Ma relativa a quale file? A quello identificato dall'handle?
--
EmanueleGallo - 06 Apr 2006
Re: Decodifica informazioni della GetDBFInfo
Si.
--
GianniCampanile - 06 Apr 2006
Handle è....
Mi sembra di capire che Handle e' il file descriptor (cioe' il valore che torna open) o mi sbaglio? Quindi se tanto mi da tanto si possono usare delle system call piu' basse?
Altra ipotesi e' che l'Handle e' un numero che diamo noi ma a quel punto che vantaggio avrebbe?
Grazie
--
AndreaFerraresi - 06 Apr 2006
Re: Handle è....
NO, handle non è un file descriptor. Non utilizzate file descriptor, vorrebbe dire utilizzare le funzioni POSIX open(), close() invece delle ANSI fopen(), fclose() etc.
handle è un numero che identifica i dati relativi a quel file; siccome deveono essere mantenute informazioni su più files aperti, deve essere mantenuto un vettore.
Supponiamo che un utente apra i files "prova", "Uno" e "Due": avrà 3 handle. Quando vorrà chiudere "Uno" dovrà passare l'handle giusto e la funzione CloseDatabaseFile() dovrà reperire le informazioni del file "Uno" e chiuderlo correttamente.
--
GianniCampanile - 06 Apr 2006
Re: Re: Handle è....
Da quanto ho capito handle è un int che identifica uno specifico database. Il valore può essere 0<=handle<=MAX_DBF_OPEN.
--
EmanueleGallo - 06 Apr 2006
Dichiarazione vettore di handle
Supponendo di voler dichiarare un vettore di strutture contenenti le informazioni dei file aperti, questo vettore dovra' essere visibile a tutte le funzioni del modulo...quindi, dove dovremmo dichiarare questo vettore?
In LPC_M2_Include?
--
FedericoFranzoni - 06 Apr 2006
Re: Dichiarazione vettore di handle
Non mettete la dichiarazione di una variabile in un include file: se questo file viene incluso da diversi moduli nello stesso progetto avreste un errore dal link. La
definizione, come extern va nell'include LPC_M2_Include.h mentre la dichiarazione va in LPC_Common.c
--
GianniCampanile - 06 Apr 2006
Re: Re: errore valore handle
Forse mi sono accorto di un errore nella funzione di
TestClose(). Nel test che verifica se l'handle è errato viene richiamata
CloseDatabaseFile(9), mentre per verificarne la funzionalità viene chiamata
CloseDatabaseFile(handle). Ma non dovrebbe essere il contrario?
--
EmanueleGallo - 06 Apr 2006
Re: Re: errore valore handle
Nessun errore, già risposto sopra.
--
GianniCampanile - 06 Apr 2006
Problema sul settaggio del numero di record
Ho letto dalle specifiche che il numero di record quando si chiama la funzione
OpenDatabaseFile deve essere settato a 1...nn dovrebbe essere aumentato di 1. Il mio dubbio è questo: se si chiama
OpenDatabaseFile il numero di record viene settato a 1, poi si chiama
CloseDatabaseFile e successivamente
OpenDatabaseFile il record deve essere settato a 1 o a 2?
--
AlessandroMarinelli - 06 Apr 2006
Re: Problema sul settaggio del numero di record
Innanzi tutto non confondiamo il numero dei record con il record corrente. Il record corrente è un'informazione
volatile, che viene settata ad 1 ogni volta che apro il file. In altre parole, se nel mio file ci fossero 1000 record, e io sto sul record corrente = 534, se chiudo il file e lo riapro il record corrente è sempre il numero 1.
--
GianniCampanile - 06 Apr 2006
Re: Problema sul settaggio del numero di record
Secondo quanto scritto nelle specifiche il record corrente si setta a 1 anche se non ci sono record. Questo sta a indicare che bisogna posizionarsi sul primo record per poter iniziare a scrivere (cosa che non andrà fatta in questo modulo). Se apro un Database senza record normalmente mi posiziono sul primo record per iniziare la scrittura.
--
EmanueleGallo - 06 Apr 2006
Re: Re: Re: Problema sul settaggio del numero di record
Corretto, anche s non necessariamente l'operazione sarà di scrittura, potrebbe essere un'operazione di lettura o di spostamento.
--
GianniCampanile - 06 Apr 2006
Re: Re: Re: Re: Problema sul settaggio del numero di record
Allora nn ho capito una cosa...dove va scritto l'1?
--
AlessandroMarinelli - 06 Apr 2006
Re: Re: Re: Re: Re: Problema sul settaggio del numero di record
Nella struttura di informazioni sul file aperto.
--
GianniCampanile - 07 Apr 2006
Re: chiarimento sull'handle
Ricapitolando la storia dell'handle, e' semplicemente un vettore di strutture e va definita in LPC_M2_Include.h ?
--
GabrieleGristina - 06 Apr 2006
Re: Re: chiarimento sull'handle
habdle è un indice che permette di risalire all'entry del vettore di strutture. Il vettore va
dichiarato come
extern in LPC_M2_Include e dichiarato in LPC_Common.c.
--
GianniCampanile - 07 Apr 2006
Dichiarazione variabili
Ma si possono dichiarare variabili esterne?
--
EmanueleGallo - 06 Apr 2006
Re: Dichiarazione variabili
Certo che sì.
--
GianniCampanile - 07 Apr 2006
Io non ho capito bene cosa bisogna fare dopo aver riempo la struttura DBFInfo.
--
EmanueleGallo - 06 Apr 2006
Re: Chiarimento su GetDBFInfo()
La funzione ritorna le informazioni nella DBFInfo leggendole dall'header del file.
--
GianniCampanile - 07 Apr 2006
piccolo errore sui test
Test:[20103] Peso[0] - [OPEN: DBF non esistente]
manca una riga in
TestM2.c, ovvero:
test[numtest].weight = 2;
per chi lo vuole correggere basta inserirla nella riga 186 ...
lol
--
GabrieleGristina - 06 Apr 2006
Re: piccolo errore sui test
NON CORREGGETE NULLA. Dopo le opportune verifiche diremo noi cosa fare. Ricordo che qualunque modifica fatta ai sorgenti passati, anche se corregge un errore presente, rischia di invalidare il compito.
--
GianniCampanile - 07 Apr 2006
domanda sulla gestione degli handle
se la gestione della struttura dei file aperti è affidata alla
OpenDatabaseFile e l'handle è l'indice che mi permette di trovare le informazioni del file nella struttura, dato che la struttura è interna alla funzione, come fà la
CloseDatabaseFile a trovare il nome del file dall'handle?
--
StefanoLAVAGNO - 06 Apr 2006
Re: domanda sulla gestione degli handle
Domanda sensata, ma, come scritto sopra, nessuno ha detto che le varialbili (il
vettore di strutture) siano
interne alla funzione. Potete usare variabili extern o static senza problema (ma anche senza esagerare).
--
GianniCampanile - 07 Apr 2006
Re: domanda sulla gestione degli handle
Credo che sia necessario definirla in modo tale che sia visibile a tutte le funzioni del modulo. Attendo lumi anch'io riguardo questo aspetto.
--
EmanueleGallo - 06 Apr 2006
Re: Re: domanda sulla gestione degli handle
Domanda sensata, ma, come scritto sopra, nessuno ha detto che le varialbili (il
vettore di strutture) siano
interne alla funzione. Potete usare variabili extern o static senza problema (ma anche senza esagerare).
--
GianniCampanile - 07 Apr 2006
Re: Re: Re: errore valore handle
Professore secondo me c'è un errore (non per forza nella funzione
TestClose() ma da qualche altra parte). Perché quando
TestClose() mi va a fare questo test "ret =
CloseDatabaseFile(handle);", il valore di handle è -1 il che non può essere possibile. PS: la funzione
OpenDatabase l'ho scritta bene infatti mi da 100%
--
EmanueleGallo - 06 Apr 2006
Re: Re: Re: errore valore handle
Verificherò meglio, ma credo che il problema possa essere che il Test della Close si aspetti che sia stata effettuata la Open. Provi a fare PRIMA il test della Open e subito dopo il test della Close.
--
GianniCampanile - 07 Apr 2006
Re: domanda sulla gestione degli handle
Credo che bisogna usare LPC_Common.c per gestire questa struttura, e penso che si devono implementare delle funzioni per gestire uno stack, tipo quelle che ha spiegato poco tempo fa Sterbini a lezione (push, pop, free, etc..)
--
GabrieleGristina - 06 Apr 2006
Re: domanda sulla gestione degli handle
Si può creare la struttura in questo modo ma credo che non sia il solo. Sicuramente gestendola tramite uno stack risparmieresti memoria (dato che aggiungerai un nodo solo quando ti servirà).
--
EmanueleGallo - 06 Apr 2006
Re: ancora su handle
Qualcosa mi fa pensare che la gestione degli handle e' + facile di quanto pensiamo... noi abbiamo gia delle strutture che possiamo usare per identificare le informazioni su un database aperto, quindi non serve creare strutture interne!
--
GabrieleGristina - 06 Apr 2006
Re: Re: Re: errore valore handle
Volevo sottolineare riguardo l'errore (presunto) che il valore di handle=-1 si propaga poi anche per gli altri test
--
EmanueleGallo - 06 Apr 2006
Re: chiarimento sulle specifiche
Salve,
volevo sapere se è possibile non allocare memoria anche se in un determinato punto della specifica, ovvero nella specifica dell'interfaccia della
GetFieldInfo c'è scritto:
"Se
NumFields vale 0, vengono ritornate tutte le informazioni sui campi e
FieldData deve essere allocato opportunamente."
Inoltre ora penso di aver capito come implementare la gestione delle handle senza usare ne una struttura aggiuntiva ne la malloc :>
--
GabrieleGristina - 07 Apr 2006
Re: Re: chiarimento sulle specifiche
Già inserito nelle NOTE.
--
GianniCampanile - 07 Apr 2006
Risultati modulo 1
Gentile professore,
Mi spiace occupare spazio e porle questa domanda qui, ma nn saprei in che altro contesto farlo. Volevo chiederle se e quando renderete noti i risultati del primo modulo, le faccio questa domanda xkè ieri mentre testavo il mio Modulo su un altra macchina, mi dava delle Warning che nei laboratori di Via Salaria (dove l'ho fatto) nn dava assolutamente, avendo ottenuto un punteggio di 53%, diventa di fondamentale importanza sapere come si comporta con i vostri test, e come vi comporterete voi! (P.S Mi hanno riferito dopo la consegna di spedire anche il readme.txt, file che per tanto nn è presente nel mio caso)
Grazie e scusate per il leggero off-topic (ma credo che possa interessare anche altri studenti)
--
GiuseppeDiFederico - 07 Apr 2006
Re: Re: Risultati modulo 1
la mancata consegna del Readme.txt è
UN ERRORE, come detto più e più volte. Non è stato ancora deciso come verrà valutato, ma dovete fare attenzione a consegnare esattamente quello che vi viene richiesto. Per quanto riguarda la correzione cerchero di dare i risultati prima possibile.
--
GianniCampanile - 07 Apr 2006
Re: Re: Re: Risultati modulo 1
Lei ha ragione professore, è stata una mia mancanza, ma pur volendo, ci ho lavorato su una macchina non mia, ignorando i bit del sistema operativo e la versione del gcc, vabbè, spero che ciò non comprometterà la mia sufficienza!!!
--
GiuseppeDiFederico - 07 Apr 2006
Re: readme.txt
Ieri mi sono accorto che anche io non ho consegnato il readme, pero' non credo sia giusto togliere punti ad un modulo solo perche' non c'e' questo file. Sta scritto solo nel primo pdf che avete dato che bisogna consegnare anche il readme quindi e' facile che qualcuno si sia scordato. Ricuramente da questo modulo in poi ci staremo tutti piu attenti

a vostro buon cuore
--
GabrieleGristina - 07 Apr 2006
Re: readme.txt
A parte che il primo pdf fa parte del compito, poi è stato detto più volte nei topic di consegnare anche il readme. Sulla valutazione vedremo, ma il compito non consiste solo nella programmazinoe, ma anche nella capacità di seguire delle specifiche: è anche questo che fa la differenza tra uno "smanettone" e un informatico. Ancora una volta quindi, anche se avete raggiunto 100 come punteggio, rivedete tutto per verificare che sia aderente alle specifiche.
--
GianniCampanile - 09 Apr 2006
Re: Re: Re: errore valore handle
Per quanto riguarda quell'errore ho fatto un'ulteriore prova e cioè verificare tramite una printf se il valore di handle ritornato dalla
OpenDatabaseFile era corretto. Il valore ritornato dalla mia
OpenDatabase è corretto ma quando vado a fare i test non lo cambia per niente l'handle.
--
EmanueleGallo - 07 Apr 2006
Re: Re: Re: errore valore handle
Ho scoperto l'errore (mio e te pareva

). Però non capisco perché fa così. Cioè se ritorno il valore dell'handle tramite una variabile allora lo passa, se lo torno tramite la struttura creata per gestire le informazioni sull'handle non lo passa
--
EmanueleGallo - 07 Apr 2006
Re: Re: Chiarimento su GetDBFInfo
Visto che il numero dei record può cambiare in moduli successivi, si dice che la
GetDBFInfo dovrà rileggere ogni volta le informazioni. Ma che si intende? Cioè la
GetDBFInfo già lo fà questo di per sé (cioè leggere le informazioni dall'header). Inoltre c'è scritto anche che
CurrentRec è sempre >0 anche se non ci sono record. Ok, ma il record corrente come va calcolato se ci sono un certo numero di record?
--
EmanueleGallo - 07 Apr 2006
Re: piccolo errore sui test (?!)
L' errore non e' un errore infatti la riga incriminata e' stata messa dopo la stampa del test qundi basta un copia-incolla su una riga precedente alla printf().
--
WalterValentini - 07 Apr 2006
efficienza del vettore
gentile prof, per ragioni di efficienza io come struttura ho utilizzato una lista. è una scelta cosi' sbagliata??? lei ha parlato finora solo di vettore... poi non so quanti finora hanno provato a cancellare gli handle non più utilizzati (con la Close) e riallocare quindi il vettore. Altrimenti non riallocando niente a mio parere non viene una cosa fatta bene. perchè eventualmente si dovrebbe inserire nella struttura un bit di utilizzo di quell'handle...
--
MarcoLaVecchia - 07 Apr 2006
Re: efficienza del vettore
L'uso del vettore era un suggerimento,va bene anche utilizzare una lista. Questo non vuol dire che sia più efficiente, ma l'efficienza è l'ultima cosa a cui dovete pensare. Per quanto riguarda l'uso del vettore, le cose sono più semplici di come le ha descritte: il "bit" basta che sia ad esempio il nome del file, che se NULL vuol dire posizinoe libera. Nno è ridondante perché comunque va fatto il controllo di non riapertura di un file già aperto....
--
GianniCampanile - 09 Apr 2006
Re: Re: piccolo errore sui test (?!)
Non cambiate il codice. In ogni caso è una fatica inutile, perché il programma di test che verrà utilizzato sarà una copia e non certo quello che modificate voi.
--
GianniCampanile - 07 Apr 2006
file pointer
ah dimenticavo, vorrei chiedere al prof 1)se i file binari sono terminati da EOF come quelli sequenziali 2)se nella struttura per mantenere gli handle è possibile inserirli, visto che finora sto provando ottenendo solo segmentation fault...
--
MarcoLaVecchia - 07 Apr 2006
Re: file pointer
Non ci devono essere byte aggiuntivi rispetto a quelli indicati nella documentazione. La seconda domanda non la capisco: vuole inserire degli EOF nella struttura ?
--
GianniCampanile - 09 Apr 2006
Come mai quando viene fatto il test completo su tutte le funzioni non viene incluso il test sulla funzione
IsDBFHandle() ?
--
MassimilianoNatale - 08 Apr 2006
Un errore del programma di test. A breve vi verrà fornita una nuova versione che includerà anche quel test.
--
GianniCampanile - 09 Apr 2006
DBF_FIXED_HEADER_LEN 64bit
Salve,
Su un sistema a 64 bit la DBF_FIXED_HEADER_LEN ottiene un valore errato per via dei long a 8 byte (come da modulo1).
Posso calcolare io la lunghezza dell'header anziche' utilizzare quel define? nel modulo1 ho fatto cosi, ma non sono sicuro sia corretto.
Grazie
--
AntoninoMuratore - 08 Apr 2006
Re: DBF_FIXED_HEADER_LEN 64bit
Certamente sì. Cercheremo di fornire una versione compatibile per sistemi a 64 bit. Mi raccomando indicatelo nelle note.
--
GianniCampanile - 09 Apr 2006
Makefile
Ho questo errore con makefile :
gcc -c -g -I ../include test/TestM2.c -o test/TestM2.o
gcc -c -g -I ../include ../src/LPC_Err.c -o ../obj/LPC_Err.o
make:
* No rule to make target `obj/LPC_OpenDBF.o', needed by `lib/Modulo2.a'. Stop.
come mai?
--
IrisKonomi - 08 Apr 2006
Re: Makefile
hai inserito Modulo1.a nella cartella DBF/Modulo1/lib ??
--
GiuseppeLisanti - 08 Apr 2006
Re: (senza titolo)
Ho provato con e senza Modulo1.a ma il problema c'è,cmq il Modulo1 mi funziona al 100% tutti i test.
--
IrisKonomi - 08 Apr 2006
Re: Makefile
Non postate qui domande su compilazione, link etc.
--
GianniCampanile - 09 Apr 2006
Re: Re: Chiarimento su GetDBFInfo?
Qualcuno può spiegarmi quello che ho chiesto poco sopra? Grazie.
--
EmanueleGallo - 08 Apr 2006
Re: Re: Chiarimento su GetDBFInfo??
Forse ho capito cosa intendete, cioè che se io sto leggendo un record ad esempio il 2° e ne inserisco uno nuovo, dovrò rileggere tutte le informazioni nell'header e poi riposizionarmi al 2° record, giusto?
--
EmanueleGallo - 08 Apr 2006
Re: Re: Re: Chiarimento su GetDBFInfo??
Giusto. Se la getDBFInfo leggesse le informazioni solo la prima volta e le mantenesse in memoria, potrebbe non fornire informazioni corrette.
--
GianniCampanile - 09 Apr 2006
Re: Makefile
Prova a fare così. Fai un make clean. Controlla che tutti i file object siano stati eliminati dalle relative cartelle di Modulo2, poi inserisci il file Modulo1.a nella /lib di Modulo1 e ricompila.
--
EmanueleGallo - 08 Apr 2006
Vorrei qualche chiarimento al riguardo. Essendo l'indice di una nostra struttura perche spesso viene testata con la differenza da numeri (come 400 nel test 20201) che potrebbero esserlo? Inoltre la funzione in se stessa deve prevedere suppongo anche controlli sulla struttura indicata dall'handle ma farlo implica il fallimento di tutti i test del
IsDBFHandle per cio come dovrei comportarmi?
scusatemi se ho interpretato male
--
FerdinandoAlessi - 09 Apr 2006
Il programma di test passa un handle che non ha mai ricevuto quindi il test deve fallire anche se l'handle "potrebbe" in teoria essere corretto.
--
GianniCampanile - 09 Apr 2006
é' corretto scrivere l'handle sul file cn estensione ".$$$?" della funzione
OpenDatabase?
Cioè quando creo il file con estensione DBF_OPEN_EXT, prima di chiuderlo posso scriverci sopra le informazioni handle[i] del file?
--
GiuseppeVioli - 09 Apr 2006
Ordine degli handle e chiarimento su GetFieldInfo
Grazie professore della risposta volevo sapere altre due cose. Gli handle devono essere ordinati? Cioè se, ad esempio, chiudo il 3° file e poi lo voglio riaprire devo rimetterlo nella 3° posizione dell'array che gestisce gli handle? Sulla
GetFieldInfo invece non capisco due test. Uno è quello del campo non valido (perché non è valido?) e il secondo è quello del confronto tra
FieldData[3].Name e Campo4; come può essere diverso? Nelle specifiche, quando
NumFields==0 dobbiamo riempire la struttura con tutti i campi del file (e là ci sarà sicuramente il Campo4) quindi questo test fallirà sempre. Scusi se mi sono un po' dilungato.
--
EmanueleGallo - 09 Apr 2006
Nelle specifiche c'è scritto che il file con estensione .$$$ va immediatamente chiuso dopo la sua apertura. Diciamo che è un flag che ti dice se il file è aperto o no. Infatti le specifiche dicono "Questo file deve essere immediatamente chiuso dopo la creazione, non contiene informazioni".
--
EmanueleGallo - 09 Apr 2006
RE : EOF
no, scusi ho scritto male: io volevo sapere 1) se di default nei file binari c'è alla fine c'è il terminatore EOF 2) volevo sapere se nella struttura posso inserire un file pointer, visto che finoraci ho provato con scarsi risultati. Cosa succede a un file pointer quando viene chiamata una fclose()????? punta a NULL???
--
MarcoLaVecchia - 09 Apr 2006
Re: Re: EOF
Provo ad aiutarti. 1) Anche i file binari hanno l'indicatore di fine file. 2) Il file pointer quando chiami la fclose() torna NULL. Per essere sicuro puoi sempre usare una printf dopo la close.
--
EmanueleGallo - 09 Apr 2006
file con estensione $$$
avevi ragione per quanto riguarda il file
".$$$" Ma allora potrei utilizzare un altro file per memorizzare tali informazioni,anche perchè se non le memorizzo appena chiudo il programma le informazioni dell'handle si cancellano
--
GiuseppeVioli - 09 Apr 2006
Re: RISPOSTE VARIE
1)
E' bizzarra l'idea di memorizzare l'handle in un file il cui nome non è conosciuto (perché il nome fa parte delle informazioni da recuperare tramite l'handle...)
2)
Gli handle non devono essere ordinati, né prima né dopo. Sono un chiave per recuperare le informazioni, l'ordine non conta. Per le altre domande mi indichi il numero del test.
3)
Non importa se ci sia o meno l'EOF, perché non viene considerato dalle funzioni di lettura. Non tenetene proprio conto. In ogni caso la fclose() non mette a NULL il puntatore, non lo può fare perché è passato per valore. Al di là di questo, il file pointer può essere messo nella struttura, anzi direi che
deve essere messo nella struttura...
--
GianniCampanile - 09 Apr 2006
Re: Re: Makefile
Controlla di aver nominato i file nel modo corretto...
--
FedericoFranzoni - 09 Apr 2006
Domanda tecnica su test e gestione errori
Volevo due chiarimenti per scrupolo:
1) Da quello che ho capito i test in alcuni casi sono interdipendenti, ossia per effettuarli correttamente bisogna effettuarne prima altri...Esattamente quali sono le dipendenze tra i test? Se i test vengono provati dal primo all'ultimo in ordine e vanno tutti bene, è sufficiente?
2) Non ho ben capito una cosa sulla gestione degli errori...giusto per scrupolo: il messaggio di errore che viene stampato deve dire quale funzione ha intercettato l'errore. Ma questa funzione dev'essere tra quelle specifiche da consegnare (tipo la Open o la Close) o possono essere anche le funzioni scritte da noi (tipo la
VerificaNome)?
--
FedericoFranzoni - 09 Apr 2006
Re: Domanda tecnica su test e gestione errori
Sicuramente il test in ordine è quello corretto.
Anche funzioni "Interne". Alla fine, però, l'ultimo messaggio di errore sarà per forza di cose di una delle funzioni di interfaccia, perché tutto parte da lì.
--
GianniCampanile - 09 Apr 2006
ATTENZIONE: versione aggiornata dei tests
Abbiamo messo in attachment alla pagina del
ModuloDue una nuova versione del file TestM2.c dei test, per correggere i seguenti errori:
- nel test complessivo mancava il test delle funzioni IdDBFHandle e
IsDBFOpen;
- le opzioni 4 e 5 erano invertite
- Un'assegnazione di peso era fatta dopo una printf quindi sembrava che il test avesse peso 0
Il file va copiato nella directory
DBF/Modulo2/test
--
AndreaSterbini - 09 Apr 2006
Re: Ordine degli handle e chiarimento su GetFieldInfo?
Grazie. Riguardo quei due test mi riferisco in particolare ai test 20304 e 20305 della
TestFieldInfo().
--
EmanueleGallo - 09 Apr 2006
Chiarimento sul Test Misto
Nel test misto ho notato che il programma mi falliva su questo confronto allegato,preso appunto dalla sezione del test misto,dopo una serie di altri confronti,ed ho intuito che é perchè io assegno un handle che ho liberato con la close al primo file che successivamente me lo richiede,quindi tanto per dire al file Prova10 assegno l'handle 6,mentre in questo test si richiede obbligatoriamente che l'handle assegnato ad un file Prova(i+1) abbia valore i.Non capisco come mai questa scelta così obbligata,anche perchè si dovrebbe avere una certa versatilità nell'assegnazione dell'handle considerato il fatto che i nomi eventuali non saranno Prova1 Prova2 e così via se non nell'ambito di questo test. Quel che vorrei chiedere é se occorre una implementazione atta a soddisfarre questa richiesta specifica oppure dobbiamo trovare una via di mezzo,anche se al momento non riesco proprio a pensare ad una soluzione che accordi le due cose.
sprintf(n, "Prova%d", i+1);
if (strcmp(DBFInfo.Name, n))
break;
--
ValerioMauro - 09 Apr 2006
Re: Chiarimento sul Test Misto
Il test misto carica gli handle restituiti in un vettore locale, contenente anche il nome del file. Poi, utilizzando quell'handle, verifica che il nome rironato dalla
GetDBFInfo corrisponda a quello suo. Non c'è quindi nessuna imposizione sull'handle. Di fatto il test serve proprio a chiudere e riaprire randomicamente per verificare che le posizioni vengano riassegnate correttamente.
--
GianniCampanile - 10 Apr 2006
Re: Re: Ordine degli handle e chiarimento su GetFieldInfo
il famoso campo "PopOI", di cui si parla anche in un precedente topic, non DEVE esistere, perché non è mai stato creato. Per il test 20305 c'è un ! davanti alla strcmp, quindi il test viene passato sse i campi sono UGUALI.
--
GianniCampanile - 10 Apr 2006
Re: Re: Chiarimento sul Test Misto
Ma é proprio su questo punto che si basa il mio dubbio,quando chiudo un file con la close io rimuovo l'handle che lo identificava tra i file aperti.Ora a meno di non dover tenere in memoria tutti i rimanenti dati sui file aperti in precedenza,il che comporterebbe non poco dispendio di memoria,non vedo altro modo per riassegnare la giusta posizione,però questo andrebbe contro la specifica di dover rimuovere la posizione allocata e in più non ci permetterebbe di aprire più di MAX_DBF_OPEN files in totale dall'inizio del programma nonostante ne siano stati chiusi un bel po', cioè mi spiego: nel caso avessimo 40 file da aprire,ne apriamo 32 come da limite specificato poi ne chiudiamo 8 e apriamo i restanti 8,però tenendo traccia di ogni singolo file aperto in precedenza per poter riallocare l'handle giusto in caso di riapertura la nostra struttura dovrebbe avere memoria pressochè infinita (mettiamo conto che i file da aprire siano 10000 tanto per fare un esempio..)
--
ValerioMauro - 10 Apr 2006
Re: Re: Re: Chiarimento sul Test Misto
Forse non mi sono spiegato: è il codice del programma di test che mantiene una relazione tra handle e nome:
DBFTest[i].handle =
OpenDatabaseFile(DBFTest[i].Nome);
Quando vuole informazioni su un file, utilizza l'handle memorizzato e poi verifica che il nome corrisponda.
Non c'è nulla da tenere in memoria e la posizione allocata va liberata dalla Close.
--
GianniCampanile - 10 Apr 2006
chiarimento sui record
non mi è chiara una cosa, i record vengono scritti subito dopo l'header, la funzione
GetDBFInfo, ci chiede di dire qual'è il record corrente, ma in questo modulo, l'unica funzione che può posizionarsi su un record è proprio la openDBF che si posiziona sempre sul primo record. questo comporta che fino a che non avremo una funzione per spostarsi tra i vari record, quindi fino a prossimi moduli, il record corrente sarà sempre 1?
--
LucaDiFilippo - 10 Apr 2006
Re: Re: Ordine degli handle e chiarimento su GetFieldInfo?
Grazie. Allora
PopOI non deve esistere, perché non è stato mai creato. Ma non è stato mai creato nel file dal quale andiamo a prelevare le informazioni? E' questo che intende?
--
EmanueleGallo - 10 Apr 2006
Re: chiarimento sui record
Si.
--
GianniCampanile - 10 Apr 2006
Re: chiarimento sui record
Ci sono altre funzioni ANSI che ti permettono di spostari nel file. E in particolare ce n'è anche una che ti permette di vedere qual'è la posizione corrente. Una volta che sai la posizione corrente è facile poi tornarci dopo aver letto le informazioni.
--
EmanueleGallo - 10 Apr 2006
Re: Re: Re: Ordine degli handle e chiarimento su GetFieldInfo
Si. I DBF di test non contengono quel campo.
--
GianniCampanile - 10 Apr 2006
Re: Re: chiarimento sui record
Non si parla di spostamento su file ma su record.
La domanda è corretta e attenzione a non dare risposte fuorvianti.
--
GianniCampanile - 10 Apr 2006
posizionamento sul file
un'altra domanda, nella open bisogna posizionarsi alla fine dell'header, ma per fare ciò devo estrarre dal file il campo numField e poi calcolarmi la lunghezza dell'Header o c'è qualche altro modo che al momento mi sfugge?
--
LucaDiFilippo - 10 Apr 2006
Re: posizionamento sul file
Questa è una domanda sensata: dato che in questo momento il DBF non ha record, la fine dell'header coincide con la fine file, quindi si potrebbe anche andare a fine file. Questo modo però fallirebbe in caso ci fossero dei record, cosa che succederà nei prossimi moduli.
Il modo corretto è quindi quello che indica lei.
--
GianniCampanile - 10 Apr 2006
posizionamento dopo header
Dopo l'apertura del file, il puntatore di lettura/scrittra del file deve essere posizionato all'inizio del primo record, cioe' immediatamente dopo l'Header.Questo è ciò che dicono le specifiche.
Ma dobbiamo posizionarci dopo la parte fissa o dobbiamo includere anche tutti i campi?
--
AlessandroCasciaro - 10 Apr 2006
Re: posizionamento dopo header
Ormai dovrebbe essere chiaro che l'header include la parte fissa e la parte variabile di dfinizinoe dei campi.
--
GianniCampanile - 10 Apr 2006
Gestione degli handle
La tabella che contiene le strutture dati dei database aperti, dovra' essere accessibile anche da funzioni presenti su moduli successivi? Secondo le specifiche sembrerebbe di no, ma allora mi chiedo: il campo contenente il record corrente di un database aperto da chi e come verra' modificato? Ovvero mi devo preoccupare della visibilita' di tale struttura anche nei moduli futuri, o basta che funzioni con il modulo corrente? Un' ultima domanda: come apriamo i dbf, solo in lettura o anche in scrittura?
--
GianlucaPari - 10 Apr 2006
Re: in generale...
Per me la differenza tra uno "smanettone" e un informatico è che lo smanettone "perde tempo" per consegnare un programma che sia funzionale, portabile e soprattutto in poche righe, ovvero solo ciò che serve, mentre un informatico se ne frega di farlo in poche righe, basta che alla fine funzioni... Penso che ci sia differenza tra scordarsi di consegnare un Readme e consegnare un programma che non segue le specifiche. Per me è solo il modo di affrontare le situazioni, un informatico se non riesce a risolvere un problema, passa oltre... Uno smanettore, a costo di perdere la vita, si pianta davanti al codice fino a che tutto non funzioni come dice lui. E' facile risolvere il problema della gestione degli handle implementando uno stack, o cmq usando la malloc, ma non sarà mai efficiente quanto un altro che non usa allocazione dinamica della memoria. Non sarà l'obiettivo di questo corso puntare all'efficienza, ma per me è sempre cosi (e spero di non essere il solo). "smanettoni never die"
--
GabrieleGristina - 10 Apr 2006
Re: Re: in generale...
Questo non è il posto per queste polemiche, il discorso non era rivolto a lei in particolare ma era generale.
Continua a sfuggire un fatto che è
importante per tutti: la consegna del file readme fa parte delle specifiche, al pari del superamento dei test di funzionalità.
--
GianniCampanile - 10 Apr 2006
Come fare i test?
Volevo sapere, siccome il 7° Test fa tutto, se seleziono il 7° test e mi dà un certo punteggio, poi posso essere sicuro che quel punteggio continuerà a darmelo? Io per esempio prima di eseguire il 7° test elimino tutti i file .$$$ e mi dà un certo punteggio. Così va bene?
--
EmanueleGallo - 10 Apr 2006
Re: Come fare i test?
Non capisco perché debba eliminare "a mano" tutti i file $$$. Il modo più "sicuro" di fare i test è di effettuarli uno dopo l'altro, compreso quello finale.
--
GianniCampanile - 10 Apr 2006
Re: Re: Re: Re :Chiarimento sul Test Misto
Ok tutto risolto,grazie per la delucidazione,mi ha portato a capire che c'era un errore nella mia implementazione..ecco i risultati ora
Fine Test [FINALE]: Numtests:[20] Totvalue:[109] Passed:[109] Score:[100.00]
--
ValerioMauro - 10 Apr 2006
cancellazione handle
gentile prof,
non mi è chiaro un aspetto delle specifiche: la Close() deve cancellare dalla struttura con gli handle
l'handle di cui sto chiudendo il file? oppure deve solamente segnare che quel certo handle
non è più in uso? io avevo interpretato nel primo modo ma questo ovviamente causa che se io chiamo i
test sulla open poi sulla close e poi sulla
IsHandle(), quest'ultima sbaglia; al contrario se io faccio
il test sulla open e poi sulla
IsHandle tutto funziona, e funziona pure se faccio Open, Close, Open,
IsHandle...
Insomma quando apro un file questo dovra rimanere per sempre all'interno della struttura dati????
--
MarcoLaVecchia - 10 Apr 2006
file in uso
avrei un chiarimento da chiedere al prof, guardando i sorgenti dei test sulla DBFInfo ho visto che quando viene fatto il test sulla funzionalità, viene di nuovo chiamata la Open. Ma siccome quel file è stato aperto in precedenza (e quindi messo nella struttura degli handle)
la mia Open ritorna errore in quanto quel file risulta già aperto....
Sto sbagliando io o è forse che quel test andrebbe eseguito senza chiamare la Open prima?????
--
MarcoLaVecchia - 10 Apr 2006
Re: cancellazione handle
C'è una dipendenza non evitabile tra i test. Effettuateli in sequenza.
La posizione occupata dall'handle può essere cancellata oppure messo un semplice flag, a scelta, ma non c'è un obbligo preciso.
Il problema, ripeto, è nella dipendenza dei test.
--
GianniCampanile - 10 Apr 2006
Re: file in uso
Per favore citate ANCHE l'ID del test. Se parla del 20204, la Open viene chiamata su un file Prova0 che non è mai stato aperto prima, quindi nessun errore.
--
GianniCampanile - 10 Apr 2006
get field info
gentile prof vorrei 2 chiarimenti sulla
GetFieldInfo:
1) cosa deve ritornare nel caso numfield = 0(dalle specifiche non lo ho capito)
2)la funzione, non dovrebbe sovrascrivere ogni dato preesistente nel vettore con i dati letti dal file???? perchè se è così non capisco perchè
nel test 20304 si debba ritornare un errore, io inserirei le informazioni sovrascivendo il vettore col contenuto del file
--
FrancescoPaturzo - 10 Apr 2006
Re: file in uso
si, grazie il test che intendevo era quello. la prossima volta sarò più preciso
--
FrancescoPaturzo - 10 Apr 2006
Re: get field info
Nel caso NumField = 0 la funzione deve ritornare le informazioni su TUTTI i campi. In questo caso, come anche nel caso NumFields > 0, non vi dovete preoccupare di allocare il vettore di dati perché è resposabilità di chi chiama la funzione.
Sul famigerato campo
PopOI, alias test 20304 ci sono già diversi topic che rispondono.
--
GianniCampanile - 10 Apr 2006
Risultati dei test strani
Professore, volevo sapere come mai se svolgo singolarmente i test (come da lei indicato) ottengo dei buoni punteggi e poi svolgendo il test finale il punteggio si abbassa drasticamente, indicando come non passati dei test che singolarmente risultavano esatti. Probabilmente sbaglio io qualcosa nel codice, però mi sembra così strano.
--
AndreaCosentino - 10 Apr 2006
Re: Risultati dei test strani
Sembra strano anche a me, la sequenza è identica.
Cerchi di capire il motivo per cui quei test non vengono passati.
--
GianniCampanile - 10 Apr 2006
Re: Re: Risultati dei test strani
Forse puo' dipendere dal fatto che le funzionalità di DBFinfo e
GetFieldInfo non le ho ancora fatte? Per fare un esempio se faccio il test 1 della open passa i primi 4 test su 5, proseguo e faccio gli altri
il 2 mi da 3/5, il 3 4/5, il 4 2/2, il 5 2/2 mentre il 6 0/2... Facendo l'ultimo test spariscono la funzionalità della open e della close...
L'ultimo test (numero 7) chiaramente lo faccio nella stessa esecuzione di
TestM2.exe
--
AndreaCosentino - 10 Apr 2006
Re: Re: Re: Risultati dei test strani
Provi invece a richiamare direttamente il test 7: le dovrebbero uscire gli stessi risultati della sequenza.
Comunque, visto che ancora c'è tempo, sviluppi le funzioni mancanti e provi tutto.
--
GianniCampanile - 10 Apr 2006
Re: chiarimento sulla visibilità della struttura per gestione handle
Salve, non mi è chiara una cosa, se definisco uno struttura dentro LPC_Common.c e dichiaro come extern un vettore di strutture su LPC_M2_Include.h non riesco ad usare questa struttura. Il problema è che a me sembra tutto normale, mentre per voi non è così.

Come mai?
--
GabrieleGristina - 10 Apr 2006
Re: chiarimento sulla visibilità della struttura per gestione handle
Da dove cerca di usare il vettore ?
Cosa intende con non è normale ?
Se dichiara extern in LPC_M2_Include e il vettore in LPC_Common.c, tutti i moduli che includono LPC_M2_Include potranno usare il vettore il cui indirizzo verrà risolto in fase di link.
--
GianniCampanile - 10 Apr 2006
ho letto i topic precedenti sul test 20304 ma sinceramente non vedo un controllo possibile per rilevare quel tipo di errore... E poi... controllo su cosa?? sul vettore??? sul file??? in teoria sia su file che su vettore credo che possiamo aspettarci qualsiasi input...
scusi ancora il disturbo
--
FrancescoPaturzo - 10 Apr 2006
Re: chiarimento sulla visibilità della struttura per gestione handle
Se faccio:
typedef struct { .... } myhandle;
e poi metto in LPC_M2_Include.h
extern myhandle lol[MAX_DBF_OPEN];
neanche mi compila il modulo2...
Lei ha scritto sopra:
Re: Dichiarazione vettore di handle
Non mettete la dichiarazione di una variabile in un include file: se questo file viene incluso da diversi moduli nello stesso progetto avreste un errore dal link. La definizione, come extern va nell'include LPC_M2_Include.h mentre la dichiarazione va in LPC_Common.c
Come fa a voi a funzionare questo?
--
GabrieleGristina - 10 Apr 2006
RE: visibilita struttura
l'unico modo che va è credo come hai fatto tu ossia la definizione nel .h e la DICHIARAZIONE nel .c (anche se mi sembra il prof ha detto la stessa cosa....)
--
FrancescoPaturzo - 10 Apr 2006
RE: visibilita struttura
per caso hai msn? cosi ci chiariamo qualche dubbio a vicenda..
il mio nick è jackgeniosky@hotmail.it
--
FrancescoPaturzo - 10 Apr 2006
Re: chiarimento sulla visibilità della struttura per gestione handle
Il problema è che non funziona cosi, il typedef lo devo mettere per forza nell'include per fare funzionare tutto. Aspetto una spiegazione. Grazie
--
GabrieleGristina - 11 Apr 2006
puntatore nella struttura DBF_INFO_t
con la funzione
GetDBFInfo dobbiamo riempire una struttura di tipo DBF_INFO_t.in questa struttura c'è un puntatore al DBF. Esso punterà all'inizio del file o alla fine dell'header, cioè dove lo lascia la open?
--
LucaDiFilippo - 11 Apr 2006
Re: puntatore nella struttura DBF_INFO_t?
DBFInfo deve leggere l'header del file quindi dovrà partire dall'inizio. Almeno da quanto sta scritto nelle specifiche
--
EmanueleGallo - 11 Apr 2006
Re: Re: chiarimento sulla visibilità della struttura per gestione handle
Forse si fa un po' di confusione sulle variabili extern. La variabile che deve essere vista deve essere dichiarata in un file sorgente (non in un .h) e chi deve chiamarla deve usare il qualificatore extern.
--
EmanueleGallo - 11 Apr 2006
La cosa che non ho ancora capito di qui è se bisogna controllare che il nome di un campo debba essere della forma Campo1, Campo2, Campo3, ecc. E quindi si capisce che un campo chiamato così non può essere valido.
--
EmanueleGallo - 11 Apr 2006
Volevo sapere a cosa serve questo test: if (rand() % 2 == 1) appartenente al test 20602
--
EmanueleGallo - 11 Apr 2006
Re: Domanda sul "Test completo e valutazione"
QUando lancio i test in sequenza da 1 a 7, mi da un certo punteggio (l'unico test che non mi supera è quello dell'apertura di 33 datbases cioè il 20601), mentre se lancio solo il 7 (che dovrebbe essere analogo al lanciare i test da 1 a 6) mi da 100%. Come mai? Va bene così?
--
EmanueleGallo - 11 Apr 2006
Re: chiarimento sulla visibilità della struttura per gestione handle
Sono curioso di vedere come fa a funzionare a te il Modulo2 se dichiari un vettore di strutture come extern in LPC_Common.c ....
A me non funziona cosi, io ho sia il typedef che la dichiarazione del vettore in LPC_M2_Include.h, e non trovo altri modi di farlo funzionare. Spero che risponda qualche professore invece degli studenti

PS.: non sto usando extern della dichiarazione del vettore di strutture
--
GabrieleGristina - 11 Apr 2006
Re: Re: chiarimento sulla visibilità della struttura per gestione handle
Ritiro tutto quello che ho detto :). Anch'io per la struttura ho fatto come hai fatto tu (cioè typedef e dichiarazione nel file .h. Scusami ancora.
--
EmanueleGallo - 11 Apr 2006
Re: Re: Re: chiarimento sulla visibilità della struttura per gestione handle
Ci sono riuscito. Sinceramente quella parte che aveva detto il professore neanche l'avevo letta quindi anch'io avevo fatto come voi. Adesso però sono riuscito a risolvere. Praticamente bisogna dichiarare la variabile in LPC_Common.c e poi per OGNI funzione che usa questa struttura bisogna dichiarare in questo modo extern "tipo struttura" "nome struttura". Così a me funziona. In fondo quello che avevo detto prima non era del tutto errato....
--
EmanueleGallo - 11 Apr 2006
Re: Re: Re: chiarimento sulla visibilità della struttura per gestione handle
e' normale che ti funzioni, tu hai ridichiarato il vettore come extern in ogni file .c dove lo usi, e non credo si fa cosi

Il problema e' solo capire se questo maledetto vettore e' visibile negli altri moduli, quindi si potrebbe fare una modifica a qualche funzione del modulo1 per vedere se effettivamente si puo' accedere ad esso anche da li.. Se vuoi provare tu... io sono pigro
--
GabrieleGristina - 11 Apr 2006
Re: RISPOSTE VARIE
- typedef, extern: Il typedef va dichiarato nel .h, altrimenti il compilatore non conosce il tipo della funzione. Si parlava di variabili in generale, quindi ho parlato solo di extern. Il typedef non riserva memoria per la variabile, ne definisce solamente il tipo. La extern invece serve solo a indicare che la memoria per quella variabile è stata riservata in un altro modulo. Una soluzione è quella di inserire il typedef e l'extern in ogni modulo che usa quella variabile e la sua definizione, cioè quella che riserva la memoria, in un solo modulo .c. Un'altra alternativa, migliore, è quella di include il typedef e l'extern nel solo file di include LPC_M2_Include.h che viene incluso da tutti i moduli. In questo modo si centralizza l'informazione. Rimane la scelta del modulo in cui definire la variabile: va definita in LPC_Common.c, e non nei moduli .c di interfaccia.
- Test 20304: Per quanto riguarda PopOI il test verifica che un campo non esistente venga rilevato come ...non esistente.
- rand() % 2: La rand() serve randomicamente (un po' 0 e un po' 1, perché fa il modulo 2) a scegliere quale dbf va aperto e/o chiuso. Questo vuol anche dire che ad ogni run il test potrebbe comportarsi in modo leggermente differente.
- Punteggio: per quanto riguarda il punteggio, non so spiegarmi il motivo della differenza tra opzioni singole e in gruppo, ma non va bene; prima di lanciare il test verifichi che nella directory ci siano solo i files del test (cancellandoli e ricopiandoli).
- Puntatore GetDBFInfo: la GetDBFInfo deve lasciare il puntatore alla fine dell'header, o meglio all'inizio del primo record (che non c'è). Leggete MOLTO BENE le specifiche interne, c'è scritto molto sulla gestione del puntatorre di lettura.
--
GianniCampanile - 11 Apr 2006
Re: Re: Domanda sul "Test completo e valutazione"
Ok, grazie. Allora qual'è il risultato che può essere ritenuto più "sicuro"? Quello fatto con i 7 test uno dopo l'altro?
--
EmanueleGallo - 11 Apr 2006
Re: Re: Re: Domanda sul "Test completo e valutazione"
Il fatto è che sono perfetteamente equivalenti, il test completo lancia i test singoli uno dopo l'altro, devono funzionare entrambi altrimenti vuol dire che c'è un errore che non sempre salta fuori ma potrebbe saltar fuori al nostro test.
--
GianniCampanile - 11 Apr 2006
Avete rotto
Avete rotto ad entrare con il mio nick e fare domande la prossima volta prendero provvedimenti
--
FrancescoPaturzo - 11 Apr 2006
Re: Re: Re: Domanda sul "Test completo e valutazione"
I test funzionano perfettamente ma soltanto dopo aver completato tutte le funzioni, o cmq le parti minime che servono a lui. Io non capisco cosa intente per:
"Rimane la scelta del modulo in cui definire la funzione: io ho consigliato LPC_Common.c."
Di che funzione parla?
--
GabrieleGristina - 11 Apr 2006
Re: Re: Re: Domanda sul "Test completo e valutazione"
Un errore (che ho corretto): rimane la scelta del modulo dove definire
la variabile....
In altre parole le variabili extern vanno definite in LPC_Common.c
--
GianniCampanile - 11 Apr 2006
Re: Re: Re: Domanda sul "Test completo e valutazione"
Non funziona lo stesso perche' il file LCP_Common.c non viene incluso da altri file di conseguenza e come se non fosse mai definito nel programma, quindi "undeclared" come errore.
--
GabrieleGristina - 11 Apr 2006
Re: Avete Rotto
Perche' non cambi direttamente la password cosi non ti rompe piu nessuno?
--
GabrieleGristina - 11 Apr 2006
Re: Re: Re: Domanda sul "Test completo e valutazione"
C'è confusinoe tra file che vengono inclusi e moduli che vengono linkati.
La dichiarazione (+ il typedef se è un nuovo tipo) serve al momento della compilazione, quindi deve essere presente in tutti i file al momento della compilazione. Se il compilatore trova un extern, ignora la mancata assegnazione di memoria per quella variabile.
Al momento del link, quello spazio di memoria deve essere riservato, ma basta che lo sia in uno qualunque dei moduli oggetto.
Detto questo ribadisco per l'ultima volta:
se devo utilizzare una variabie globale MyHandle di tipo MYHANDLE_t:
In LPC_M2_Include.h:
typedef struct {
...
} MYHANDLE_t;
extern MYHANDLE_t MyHandle;
In LPC_Common.c
MYHANDLE_t MyHandle;
Ovviamente tutti i moduli includono LPC_M2_Include.h.
--
GianniCampanile - 11 Apr 2006
Re: Re: Re: Domanda sul "Test completo e valutazione"
Cosi e' corretto, grazie.
--
GabrieleGristina - 11 Apr 2006
Re: Re: Re: Domanda sul "Test completo e valutazione"
E invece come ho fatto io va bene? Cioè ho dichiarato non extern la variabile in LPC_COmmon.c e poi per ogni funzione che la usa ho dichiarato una variabile dello stesso nome e tipo ma con qualificatore extern.
--
EmanueleGallo - 11 Apr 2006
Errore nel file Prova0.dbf ?
Salve!
Le specifiche del modulo 1 dicono che l'header di ogni database deve cominciare con il nome del database stesso, che tra l'altro costituisce (con l'estensione) il nome del file. Cioè il database chiamato XXX deve essere contenuto nel file XXX.dbf e iniziare con i caratteri XXX
...
Tuttavia, vi allego l'hexdump del file Prova0.dbf cosi' come è incluso nella distribuzione ufficiale. Il file non dovrebbe cominciare con Prova0... ?
La mia funzione Close ovviamente si rifiuta di cancellare il file SgNaRf.$$$ ...
$ hd Prova0.dbf
00000000 53 67 4e 61 52 66 00 00 00 00 00 00 06 00 00 00 |SgNaRf..........|
00000010 00 00 75 00 26 43 f9 ec d9 43 61 6d 70 6f 31 00 |..u.&CùìÙCampo1.|
00000020 00 00 00 00 00 01 00 0a 43 61 6d 70 6f 32 00 00 |........Campo2..|
00000030 00 00 00 00 02 00 08 43 61 6d 70 6f 33 00 00 00 |.......Campo3...|
00000040 00 00 00 03 00 04 43 61 6d 70 6f 34 00 00 00 00 |......Campo4....|
00000050 00 00 04 00 01 43 61 6d 70 6f 35 00 00 00 00 00 |.....Campo5.....|
00000060 00 01 00 01 43 61 6d 70 6f 36 00 00 00 00 00 00 |....Campo6......|
00000070 02 00 08 00 00 |.....|
00000075
-- AlessandroPiva - 11 Apr 2006
Re: Re: Re: Domanda sul "Test completo e valutazione"
E' corretto, ma ha il difetto che se deve cambiare il nome o il tipo di quella variabile, deve andare in tutti i file a fare la modifica.
Averla in un solo file è più comodo.
-- GianniCampanile - 11 Apr 2006
Re: Errore nel file Prova0.dbf ?
Il file Prova0.dbf è un DBF "non valido" rispetto alle specifiche.
Il test serve a garantire che dalla GetDBFinfo() non venga ritornato il nome del file ma il valore presente nell'header.
D'altronde, e nessuno lo ha notato, anche ProvaTest.dbf del modulo 1 non era un DBF valido, perché nell'header c'era scritto "Prova".
Questa è chiaramente una situazione errata e può creare qualche problema, ma i comportamenti possibili sono 2:
- 1. Il file con estensione .$$$ da creare e cancellare ha lo stesso nome del file, quindi nell'esempio sia la Open che la Close utilizzerebbero "Prova0.$$$"
- 2. Il file con estensione .$$$ da creare e cancellare ha il nome del DBF letto dall'header, quindi nell'esempio sia la Open che la Close utilizzerebbero "SgNaRf.$$$"
La soluzione mista va evitata, cioè che la Open crei il file "Prova0.$$$" e la Close cerchi di cancellare "SgNaRf.$$$".
Per semplicità suggerisco la soluzione 1.
-- GianniCampanile - 11 Apr 2006
Re: Errore nel file Prova0.dbf ?
Anche io ho lo stesso problema, ma il suo discorso professore non mi torna, se il DBF è errato dovrebbe tornarci un errore, e sopratutto voi usate un DBF errato per fare i test del retrival delle informazioni dalla parte fissa dell'header?
Se il DBF è errato che senso ha leggere la parte fissata e poi fare il test di quello che si è letto?????
Questo fatto mi crea molti problemi perchè io nella mia struttura non mi allocavo spazio per il nome,ma solo per il puntatore e per chiudere il file andavo a leggermi il nome nella parte fissa dell'header....
-- Users.691942 - 12 Apr 2006
possibile bug nel test misto
gentile prof, volevo farle notare quella che è a mio avviso una anomalia nel test misto:
quando viene eseguito il primo (20601) vengono aperti 32 database, che però non vengono chiusi da nessuna parte, visto che non vi sono chiamate alla Close() prima dell'inizio del secondo test(20602). Questo comporta 2 cose: 1)che il test successivo non viene portato a termine in quanto se la Open è stata fatta bene dovrebbe ritornare l'errore LPC_NO_SPACE; 2) che quindi rieseguendo per la seconda volta il test 20601 questo non venga superato, in quanto la open ritorna appunto lo stesso errore LPC_NO_SPACE. Sto sbagliando io ??? Io la chiusura dei file aperti e la rimozione di essi dalla struttura dati la faccio nella Close come credo che indichino le specifiche.
-- MarcoLaVecchia - 12 Apr 2006
Re: Re: Errore nel file Prova0.dbf ?
Se ci fosse una funzione di "Verifica Header" allora questa dovrebbe tornare errore. Questa funzione non c'è e non vi è stata richiesta.
Da quello che mi dice non credo sia un problema aggiungere il nome fiel nella struttura che mantiene in memoria e utilizzare quello.
-- GianniCampanile - 12 Apr 2006
Re: possibile bug nel test misto
I test sono corretti...
Se guardi il codice all'inizio vengono rimossi tutti i lock dei file, poi li riapre.
-- GabrieleGristina - 12 Apr 2006
Re: possibile bug nel test misto
Non c'è nessun bug: il test 20601 deve ritornare l'errore LPC_NO_SPACE per essere superato, ma il programma non esce, prosegue con il test 20602 dove vengono chiusi (e a volte riaperti e richiusi) tutti i files.
-- GianniCampanile - 12 Apr 2006
Non capisco cosa devo scrivere su DBFInfo->RecordLen
Nell'header c'e' scritta la lunghezza di ogni record che dipende dai tipi di campi dentro il database. Come si fa a calcolare la lunghezza di un campo se i campi possono essere di tipo diverso e quindi avere diversa lunghezza?
-- GabrieleGristina - 12 Apr 2006
Re: Re: Domanda Tecnica su gestione errori
Non è detto che per forza di cose l'ultimo messaggio debba essere di una funzione d'interfaccia. (la funzione interna potrebbe stampare il messaggio di errore e tornare il valore alla funzione chiamante, la quale sapendo che il messaggio lo gestisce la funzione interna si preoccupa solo di ritornare l'errore). A meno che nn sia obbligatorio gestire l'errore in tutte e due le funzioni. Giusto?
-- FedericoFranzoni - 12 Apr 2006
Re: Re: Re: Domanda Tecnica su gestione errori
E' proprio quello ilpunto : è obbligatorio gestire l'errore in tutte e due le funzioni, come dovrebbe essere chiaro dalle specifiche e dagli esempi.
-- GianniCampanile - 12 Apr 2006
Re: chiarimento su RecordLen
E' lo stesso campo dell'header, quindi avrà lo stesso valore. Il chiamante utilizza solo le funzioni di interfaccia, non sa nulla dell'header e di come è fatto.
-- GianniCampanile - 12 Apr 2006
Re: Re: chiarimento su RecordLen
Va bene pero' se lei legge bene le specifiche del modulo1 (header) e del modulo2 (GetDBFInfo), sono proprio diverse... Lo inserisca nelle note del modulo2.
A questo punto chiariamo un'altra cosa, il campo CurrentRec in DBF_INFO_t deve essere settato ad 1 in ogni caso oppure se NumRecs e' maggiore di 0, allora CurrentRec = NumRecs ?
-- GabrieleGristina - 12 Apr 2006
Re: Re: Re: chiarimento su RecordLen
Non mi sembra ci siano differenze nella documentazione.
Per quanto riguarda il CurrentRec, se le leggesse bene le specifiche troverebbe come calcolare il numero di record corrente.
-- GianniCampanile - 12 Apr 2006
Re: Re: Re: chiarimento su RecordLen
specifiche sull'header (modulo1)
...
2 bytes
* Lunghezza di ogni record. Short in Network Byte Order.
...
specifiche sulla struttura DBF_INFO_t (modulo1/2)
...
int RecordLen
Lunghezza di un record del database.
...
A me sembra molto diverso
Per la seconda domanda le specifiche non sono chiare appunto ho domandato, pero' se non intende rispondere faccio come meglio credo, se sbaglio pazienza (oppure potrei mandare una mail a sterbini visto che e' lui il professore del mio canale). Grazie lo stesso
-- GabrieleGristina - 12 Apr 2006
A QUANDO MODULO1.A PER 64 BIT
Come da oggetto, volevo sapere quando metterete online questo pacchetto, grazie!
-- SimoneDiCola - 12 Apr 2006
Re: A QUANDO MODULO1.A PER 64 BIT
A breve.
-- GianniCampanile - 12 Apr 2006
chiarimento su DBF_INFO_t
professore vorrei sapere se è giusto che nel file i valori di numfields e recordlen siano short, ma che poi vengano assegnati a dei valori int nella struttura DBF_INFO_t...
forse m sbaglio ma nn dovrebbe dare problemi?
-- StefanoLAVAGNO - 12 Apr 2006
Re: chiarimento su DBF_INFO_t
l'assegnamento di uno short ad un int non crea problemi xkè generalmente un int è di dimensioni pari o maggiori di uno short, per cui al massimo c'è uno spreco di memoria. ma non c'è perdita di informazioni...
non dovrebbe darti nemmeno warning (per lo stesso motivo), ma in caso sarebbe sufficiente un cast.
-- FedericoFranzoni - 12 Apr 2006
Re: chiarimento su DBF_INFO_t
Corretto.
-- GianniCampanile - 13 Apr 2006
Chiarimenti test 20304
Qualcuno può spiegarmi perchè il test 20304 deve fallire ? Il nome del campo inizia con un carattere alfabetico enon ha altri caratteri al di fuori di quelli richiesti nelle specifiche.
// Test campo
NumFields = 1;
strcpy(FieldData[0].Name, "PopOI");
test[numtest].weight = 1;
test[numtest].testid = 20304;
strcpy(test[numtest].desc, "FieldInfo: nome campo");
printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
ret = GetFieldInfo(handle, NumFields, &FieldData[0]);
printf("Ritorno della FieldInfo: [%d]\n", ret);
if (ret != LPC_OK)
test[numtest].passed = 1;
numtest++;
// Verifica funzionalita'
test[numtest].testid = 20305;
test[numtest].weight = 10;
strcpy(test[numtest].desc, "FieldInfo: Funzionalita'");
printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
ret = GetFieldInfo(handle, 0, &FieldData[0]);
printf("Ritorno della FieldInfo: [%d]\n", ret);
if (!strcmp(FieldData[3].Name, "Campo4"))
test[numtest].passed = 1;
numtest++;
}
-- SimoneDiCola - 13 Apr 2006
Re: Chiarimenti test 20304
Per favore prima di postare controllate i topic precedenti, basta fare una ricerca.
-- GianniCampanile - 13 Apr 2006
Chiarimenti test 20305
Professore anche su questo test ho dei dubbi. Utilizzando DDD vedo che il campo Name del vettore che mi viene passato è qualcosa del tipo /000/002/nCampo2/000, che naturlamente mi fà fallire il test. Sicuramente stò facendo un pò di confusione. Mi può spiegare ?
// Verifica funzionalita'
test[numtest].testid = 20305;
test[numtest].weight = 10;
strcpy(test[numtest].desc, "FieldInfo: Funzionalita'");
printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
ret = GetFieldInfo(handle, 0, &FieldData[0]);
printf("Ritorno della FieldInfo: [%d]\n", ret);
if (!strcmp(FieldData[3].Name, "Campo4"))
test[numtest].passed = 1;
numtest++;
}
-- SimoneDiCola - 13 Apr 2006
Re: Chiarimenti test 20305
Mi sembra che con ddd stia esaminando l'indirizzo di memoria FieldData, non il nome del campo che parte qualche byte dopo.
-- GianniCampanile - 13 Apr 2006
Ordine esecuzione Test
Se eseguo i test ordinatamente, quando arrivo al test completo ho dei problemi...se invece eseguo il test completo separatamente, tutto va alla perfezione.
E' normale?
-- GiuseppeLisanti - 13 Apr 2006
Re: Ordine esecuzione Test
già risposto..nn l'avevo vista!
-- GiuseppeLisanti - 13 Apr 2006
Re: Chiarimenti test 20304
Professore li ho letti tutti i post precedenti, ma non ho capito dove questo campo non deve esistere. Devo controllare il nome dei campi all'interno del file.dbf e vedere se esiste un nome del campo che corrisponda a questo famigerato PopOi ?
-- SimoneDiCola - 13 Apr 2006
Re: Chiarimenti test 20304
Non è che PopOi debba essere trattato differentemente dagli altri: il comportamento della GetFieldInfo() è di ritornare le informazioni di uno o più campi leggendole dal database file. Se il campo non è valido, vuoi perché è scritto male, vuoi perché non esiste (PopOi), deve ritornare errore.
-- GianniCampanile - 13 Apr 2006
Re: Chiarimenti test 20304
Quindi mi stà dicendo che devo andarlo a vedere all'interno del file ?
-- SimoneDiCola - 13 Apr 2006
Re: Re: Chiarimenti test 20304
Si. E' vero che all'apertura di un file potrebbe leggere e mantenere tutte le informazioni di quel file, compresi i nomi/tipi/lunghezze dei campi, ma il discorso fatto per la GetDBFInfo vale anche per la GetFieldInfo: ci potrebbe essere in seguito qualche altra funzione che modifica le informazioni e quindi vanno sempre rilette dal file.
-- GianniCampanile - 13 Apr 2006
Re: Chiarimenti test 20304
Grazie mille professore, è stato chiarissimo !
-- SimoneDiCola - 13 Apr 2006
Test 20602
Volevo sapere se in questo test qualche volta può capitare che ritorni un handle non valido. Volevo averne la conferma, perché secondo me è normale. Ad esempio, mettiamo il caso che il 9° file è stato chiuso (quindi l'handle per quel file non c'è più). Ora se per puro caso l'istruzione di quel test (i = rand() % MAX_DBF_OPEN;) mi dà come valore 9, allora questa istruzione DBFTest[i].handle >= 0 non è valida. Procede in modo corretto così? Grazie.
-- EmanueleGallo - 13 Apr 2006
Re: Test 20602
No, mi sembra tutto corretto.
Quando un file viene chiuso il relativo handle viene messo a -1 e il test iniziale:
i = rand() % MAX_DBF_OPEN;
// Se l'handle è valido deve essere giusto il test altrimenti no
if (DBFTest[i].handle >= 0)
{
garantisce che viene preso in considerazione solo un handle ancora valido.
-- GianniCampanile - 13 Apr 2006
Re: Test 20602
Forse la domanda era un'altra: ovviamente succede che l'handle non sia valido, in quel caso viene eseguito l'else:
else
{
ret = IsDBFHandle(DBFTest[i].handle);
if (ret == LPC_OK)
break;
}
che testa se anche la IsDBFHandle() si accorge che l'handle non è valido. Se infatti questa ritorna LPC_OK, allora è un errore e il test è fallito (la variabile ok rimane a 0).
-- GianniCampanile - 13 Apr 2006
Output Test misto
Premetto che il test completo arrivo a 100 %, però ho notato che quando il programma arriva al test n° 20602, produce una diecina di scritte "handle non valido", naturalmete è la chiamata alla funzione LPC_Errore
nella funzione IsDBFHandle. Volevo sapere se è normale questo comportamento o se sono io che sbaglio.
// Funzionalita' mista di tutte le funzioni
test[numtest].testid = 20602;
test[numtest].weight = 15;
strcpy(test[numtest].desc, "MISTO: Is, Close, Open");
printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
for(num = MAX_DBF_OPEN;num > 0;)
{
ok = 0;
i = rand() % MAX_DBF_OPEN;
// Se l'handle � valido deve essere giusto il test altrimenti no
if (DBFTest[i].handle >= 0)
{
num--;
// Handle valido
ret = IsDBFHandle(DBFTest[i].handle);
if (ret != LPC_OK)
break;
// Info e nome
ret = GetDBFInfo(DBFTest[i].handle, &DBFInfo);
if (ret != LPC_OK)
break;
sprintf(n, "Prova%d", i+1);
if (strcmp(DBFInfo.Name, n))
break;
// Chiudo e a volte riapro
ret = CloseDatabaseFile(DBFTest[i].handle);
if (ret != LPC_OK)
break;
if (rand() % 2 == 1)
{
DBFTest[i].handle = OpenDatabaseFile(DBFTest[i].Nome);
if (DBFTest[i].handle < 0)
break;
ret = CloseDatabaseFile(DBFTest[i].handle);
if (ret != LPC_OK)
break;
}
DBFTest[i].handle = -1;
*DBFTest[i].Nome = '\0';
}
else
{
ret = IsDBFHandle(DBFTest[i].handle);
if (ret == LPC_OK)
break;
}
ok = 1;
}
if (ok)
test[numtest].passed = 1;
numtest++;
-- SimoneDiCola - 13 Apr 2006
Re: Output Test misto
Normale. Dovrebbe eliminare la gestione dell'errore nella IsDBFHandle in quanto è una funzione chiamata proprio per quello scopo, quindi è ridondante (direi anche errato) ritornare un errore quando l'handle è non valido. E' un chiarimento utile, lo aggiungo nelle note.
-- GianniCampanile - 13 Apr 2006
Re: Output Test misto
Diciamo che me ne stampa quasi una trentina. E' l'entrata in questo else che produce queste stampe..
else
{
ret = IsDBFHandle(DBFTest[i].handle);
if (ret == LPC_OK)
break;
}
-- SimoneDiCola - 13 Apr 2006
Re: chiarimento gestione errore in LPC_IsDBF.c
In pratica non bisogna "gestire" l'errore con LPC_GestioneErrore no?
-- GabrieleGristina - 13 Apr 2006
Test 20204
Salve professore.volevo chiederle se c'è un errore nel test 20204 quando nell'if si verifica se nel DBFInfo.Name non ci sia "SgNaRf". Nel caso sia giusto volevo chiederle cosa invece dovrebbe essere inserito in DBFInfo.Name. Grazie
// Verifica se legge dall'header
test[numtest].testid = 20204;
test[numtest].weight = 5;
strcpy(test[numtest].desc, "DBFInfo: verifica lettura da header");
printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
handle0 = OpenDatabaseFile("Prova0");
if (handle0 >= 0)
{
ret = GetDBFInfo(handle0, &DBFInfo);
printf("Ritorno della DBFInfo: [%d]\n", ret);
if (ret == LPC_OK)
{
if (!strcmp(DBFInfo.Name, "SgNaRf"))
test[numtest].passed = 1;
}
-- AlessioDezi - 13 Apr 2006
Re: Test 20204
Già discusso più volte.
-- GianniCampanile - 18 Apr 2006
errore LPC_BAD_FIELD nella funzione GetFieldinfo
la funzione GetFieldInfo, da come è stato detto in risposte precedenti restituirà l'errore LPC_BAD_FIELD in caso che un campo con un determinato nome non sia presente nel DBF, prima di fare questo controllo però, dobbiamo anche controllare che il nome sia un nome valido come facevamo per la CreateDBF?
-- LucaDiFilippo - 14 Apr 2006
Re: errore LPC_BAD_FIELD nella funzione GetFieldinfo
Non è richiesto.
-- GianniCampanile - 18 Apr 2006
A lezione ha detto che se il NumFields è diverso da 0, dobbiamo prelevare tutte le informazioni riferite a quel campo, se esiste. La domanda è: In questo modulo, non ho nessun record, che informazioni prendo? Come devo comportarmi in questo caso?
-- SimoneDiCola - 14 Apr 2006
Confonde la definizione di un campo con il valore.
-- GianniCampanile - 18 Apr 2006
Problemi su Archittettura a 64 bit
La funzione GetDBFInfo mi crea dei problemi restituendomi un valore di NumFields (dopo la conversione) errato (mi torna 1032)... Professore potrebbe spiegarmi come ricalcolare DBF_FIXED_HEADER_LENGTH, in maniera di poter testare se il tutto funziona correttamente? Nell'attesa che vengano pubblicate le specifiche per macchine a 64 bit. La ringrazio.
-- AndreaCosentino - 14 Apr 2006
Problemi su Archittettura a 64 bit
Mi sono fatto stampare in %d i valori di Sizeof(long) e sizeof(short) e rispettivamente sono di 4 e 2... quindi non riesco a capire perchè la conversione mi faccia tornare un valore di 1032...
-- AndreaCosentino - 14 Apr 2006
Re: Problemi su Archittettura a 64 bit
Se le dimensioni sono 4 e 2 non dovrebbe esserci problema. L'unico problema potrebbe essere time_t, il cui size potrebbe essere 8. IN ogni caso il calcolo è semplice, considerando un long di 4 e uno short di 2 ottiene immediatamente il valore di DBF_FIXED_HEADER_LENGTH.
-- GianniCampanile - 18 Apr 2006
intervallo valore di handle
gli handle devono per forza avere come "limite superiore" MAX_DBF_OPEN-1 ? cioè se per esempio apro 32 dbf, poi ne chiudo uno e ne apro un altro, il relativo handle deve "rimpiazzare" quello del dbf chiuso oppure posso anche assegnargli un altro valore?
-- MatteoNati - 14 Apr 2006
Re: intervallo valore di handle
In quel momento può assegnare un altro valore ma la posizione lasciata libera deve poter essere riutilizzata se necessario.
-- GianniCampanile - 18 Apr 2006
.ZIP
Scusi se uso questo spazio per parlare dei risultati del 1 Modulo,ma non avevo udea di dove scriverla.Perchè il formato ZIP era quello corretto nelle specifiche se non sbaglio si parlava solo di comprimere i file e non specificava in che modo.
-- AlessandroCasciaro - 15 Apr 2006
Re: .ZIP
In effetti sono arrivati tar, gz, zip, etc. Questo non era detto esplicitamente quindi non è un errore. Per i prossimi moduli cercheremo di stabilire un formato comune.
-- GianniCampanile - 18 Apr 2006
Professore volevo chiederle dei chiarimenti sulla funzione GetFieldInfo:
1) Nel test 20304 bisogna fare il controllo dell'esistenza del campo PopOI. Ho notato che alla funzione GetFieldInfo viene passato il NumFields=1, volevo sapere se dobbiamo verificare l'esistenza di quel campo in tutti i campi del file.dbf, oppure dobbiamo verificare che il nome passato (PopOI) sia uguale solo per il campo indicato da NumFields?
2)Nel caso in cui NumFields sia diverso da 0, dobbiamo leggere il valore che il campo, contrassegnato da NumFields, contiene. Considerando che non abbiamo record, come devo comportarmi? Inoltre, nel caso in cui avessimo dei record dai quali potessimo leggere dati, la lettura deve essere eseguita al record corrente?
-- BaggiAlessandro - 15 Apr 2006
Sono sbagliate entrambe le domande.
1) Ci sono molti topic su PopOi.
2) Ancora confusione tra definizione e valore di un campo
-- GianniCampanile - 18 Apr 2006
Salve professore, volevo chiederle se nella struttura FIELD_DATA_t da riempire con i dati dei campi in GetFieldInfo i dati già presenti nella struttura sono messi in ordine come nel DBF o bisogna "cercarli" in diverse posizioni dell'header. Grazie!
-- AlessioDezi - 17 Apr 2006
Cioè se i nomi passati rispettano la stessa sequenza che sul file ? No, bisogna cercarli.
-- GianniCampanile - 18 Apr 2006
Re: Re: Test 20204
Si ma il test viene passato solo se nel DBFInfo.Name c'è SgNaRf!Non ci dovrebbe essere Prova0?
-- AlessandroMarinelli - 18 Apr 2006
Re: Re: Re: Test 20204
Legga topic precedenti sullo stesso argomento.
-- GianniCampanile - 18 Apr 2006
Re: Re: Re: Re:Test 20204
Se chiedo chiarimenti è perchè nn ho capito!Lei ha detto che si deve salvare nella struttura creata da noi il nome del file che viene passato alla funzione openDatabase cioè Prova0 ma se lo metto in DBFInfo.Name Prova0 nn passo il test mentre invece se leggo i primi 10 byte del dbf, ovvero SgNaRf e lo metto in DBFInfo.Name il test lo passo...vorrei sapere con precisione cosa devo fare??
-- AlessandroMarinelli - 18 Apr 2006
Re: Re: Re: Test 20204
Te lo dico io cosa devi fare, non devi passargli il nome del file ma devi passargli quello che sta scritto nell'header
-- GabrieleGristina - 18 Apr 2006
possibile errore nel test 20203
se la funzione non ha mai aperto un dbf, l'inserimento dell'handle==-1 risulta essere giusto... però non dovrei aprire nessun file, ritornando quindi LPC_OK! Però questo test si aspetta che io modifichi la struttura DBF_INFO_t aspettandosi di trovare il valore 6 in NumFields come se il parametro handle che mi passa il test non sia -1 ma un valore ke gli è stato ritornato dalla OpenDatabaseFile...
com'è possibile??
// Verifica funzionalita'
test[numtest].testid = 20203;
test[numtest].weight = 10;
strcpy(test[numtest].desc, "DBFInfo: Funzionalita'");
printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
DBFInfo.NumFields = 0;
ret = GetDBFInfo(handle, &DBFInfo);
printf("Ritorno della DBFInfo: [%d]\n", ret);
if (ret == LPC_OK)
{
printf("Database modificato il [%s]\n", ctime(&DBFInfo.LastUpdate));
if (DBFInfo.NumFields == 6)
test[numtest].passed = 1;
}
numtest++;
-- StefanoLAVAGNO - 18 Apr 2006
Re: possibile errore nel test 20203
ho risolto tutto... non sapevo che andava eseguito prima il test della open per funzionare il test della GetDBFInfo!!
-- StefanoLAVAGNO - 18 Apr 2006
Salve professore volevo chiederle se bisogna SEMPRE in tutti i casi di errore delle funzioni chiudere il databasefile in questione o in alcuni casi non bisogna chiudere il file? Nel test finale se chiudo i file nel caso di errore della getFieldInfo() ( caso in cui il campo non è valido ) alcuni test sulle funzioni successive danno errore, nel caso in cui non chiudo i file il test da 100%. Volevo sapere se non bisogna chiudere il file o se c'è un errore nel test di valutazione.Grazie.
-- AlessioDezi - 18 Apr 2006
Re: CloseDatabase
No, attenzione, non bisogna sempre chiudere il database file, ma solo "disfare" tutto (il possibile) quello che viene fatto nella funzione.
Se siamo nella OpenDatabaseFile(), viene aperto il DBF, viene allocata memoria e poi c'è un errore, allora bisogna chiudere il DBF e liberare la memoria. Se siamo nella GetFieldInfo() e c'è un errore, non bisogna chiudere il DBF perché non è stato aperto dalla GetFieldInfo().
La regola è che in caso di errore in una funzione F()le condizioni di memoria, file etc. devono essere ripristinate allo stato immediatamente precedente alla chiamata ad F().
-- GianniCampanile - 19 Apr 2006
ATTENZIONE ARCHITETTURE 64BIT
Chi ha un processore a 64 bit può avere le lunghezze dei tipi long e double diverse.
Nella pagina ModuloDue c'è un tar.gz con un programma di test e nelle Note ci sono le istruzioni per eseguirlo.
-- GianniCampanile - 19 Apr 2006
Re: ARCHITETTURA 64 BIT
Nel mio sistema un long, come il tipo size_t sono rappresentati con 8 byte, mentre uno short occupa 2 byte ed un int 4 byte. Nel mio programma per evitare problemi ho utilizzato variabili int al posto delle variabili long, in quanto ho testato su diverse macchine a 32 bit che il sizeof di un int e' identico a quello di un long. Mi faccia sapere se devo modificare questa cosa.
-- SimoneDiCola - 19 Apr 2006
Re: Re: ARCHITETTURA 64 BIT
Vorrei evitare che possano sorgere problemi: nel file LPC_Include.h ci sono dei sizeof(long) che se non hanno la dimensione a 4 byte possono creare problemi. Se lei ha modificato il file, comunque noi testiamo con il file originale, quindi il suo modulo potrebbe non funzionare.
Per favore faccia girare il test64 e mi faccia sapere il risultato (il file OUT.txt) su questa pagina.
-- GianniCampanile - 19 Apr 2006
Re: Re: Re: ARCHITETTURA 64 BIT
[simone@localhost test64]$ sh ./c.sh
COMPILAZIONE....
In file included from /usr/include/features.h:337,
from /usr/include/stdio.h:28,
from test64.c:1:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
In file included from /usr/include/features.h:337,
from /usr/include/stdio.h:28,
from test64.c:1:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
ESECUZIONE....
./c.sh: line 8: test64_1: command not found
./c.sh: line 10: test64_2: command not found
./c.sh: line 12: test64_3: command not found
[simone@localhost test64]$ sh ./c.sh
COMPILAZIONE....
In file included from /usr/include/features.h:337,
from /usr/include/stdio.h:28,
from test64.c:1:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
In file included from /usr/include/features.h:337,
from /usr/include/stdio.h:28,
from test64.c:1:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
ESECUZIONE....
./c.sh: line 8: test64_1: command not found
./c.sh: line 10: test64_2: command not found
./c.sh: line 12: test64_3: command not found
[simone@localhost test64]$
Ad ogni modo sono riuscito a farmi stampare i valori:
[simone@localhost test64]$ ./test64_1
SHORT:[2] INT:[4] LONG:[8] TIME:[8] FLOAT:[4] DOUBLE:[8]
-- SimoneDiCola - 19 Apr 2006
Re: Re: Re: ARCHITETTURA 64 BIT
No, le mancano gli header per il supporto del 32 bit. La stampa di test64_1, che è compilato senza opzioni, mostra che il long e il time_t sono a 8 byte e non va bene.
Cerchi di scaricare gli header necessari (stubs-32.h e altri) per il suo sistema.
Che sistema è ?
-- GianniCampanile - 19 Apr 2006
Re: Re: Re: ARCHITETTURA 64 BIT
è un compaq presario mod. r3000 con processore amd 3000 64 bit.
Dove le trovo questi header e come vanno installati ?
-- SimoneDiCola - 19 Apr 2006
Re: Re: Re: ARCHITETTURA 64 BIT
Che sistema operativo (tipo e versione) ? Quale compilatore ?
-- GianniCampanile - 19 Apr 2006
Re: Re: Re: ARCHITETTURA 64 BIT
Sistema operativo : Fedora core ver. 4
Compilatore: gcc versione 4.0.0
-- SimoneDiCola - 19 Apr 2006
Re: Re: Re: Architetture a 64 bit
Forse posso aiutarvi. Anche io ho un processore a 64 bit.
SO: Fedora Core 4 (versione per processori a 64 bit).
gcc: 4.0.0
Ho riscontrato gli stessi problemi per i vari calcoli delle lunghezze poichè anche a me vengo i risultati:
sizeof (long) = 8
sizeof (int) = 4
sizeof (short) = 2
Per risolvere il problema nel modulo1 ho ridefinito alcune costanti presenti nel file LPC_Include.h nel file LPC_M1_Include.h sostituendo il sizeof (long) con il sizeof (int). Cosi facendo ho avuto risultati corretti al 100% sia sulla mia macchina che su un altro pc a 32 bit con altro SO.
-- EnricoLibralato - 20 Apr 2006
Test 20602
Nel test misto (in particolare il test n. 20602) vengono chiusi randomicamente alcuni DBF precedentemente aperti. Per come è stato implementato il mio modulo questo causa il riuso di alcuni handle e dunque il test fallisce quando viene fatto un controllo sul nome del DBF associato all'handle 23.
C'è qualcosa di errato nel mio codice o nei test non è stata garantita la facoltà di utilizzare liberamente gli handle?
-- MassimilianoNatale - 20 Apr 2006
posizionamento del puntatore
Gentile prof, vorrei precisare che mi funziona tutto. Mi è rimasto un unico dubbio da solvere:
nelle funzioni DBF_Info, GetFieldInfo, e Open il file pointer dove deve essere posizionato??? Io eseguo nelle funzioni tutti gli spostamenti sempre dall?inizio del file(ossia prima di ogni spostamento riporto il puntatore all?inizio). E? giusto questo approccio oppure è richiesto esplicitamente che venga posizionato in qualche punto specifico????
-- MarcoLaVecchia - 20 Apr 2006
Re: posizionamento del puntatore
Ciao, da quello che ho capito il puntatore del file bisogna farlo tornare al valore che era al momento della chiamata alla funzione!!!Non è difficilissimo da fare!!Buon lavoro
-- AlessioDezi - 20 Apr 2006
Re: Re: Re: Architetture a 64 bit
Il problema si risolverebbe se si compila con l'opzione -m32 del gcc. Comunque stiamo preparando una versione di LPC_Include che sia compatibile con entrambe le architetture.
Per ora la soluzione che avete adottato va bene.
-- GianniCampanile - 21 Apr 2006
Re: Test 20602
No, il test è corretto. Non viene fatta nessuna assunzione sul valore dell'handle.
-- GianniCampanile - 21 Apr 2006
Re: posizionamento del puntatore
Far ritornare il puntatore all'inizio non è sempre necessario, è uno spreco di risorse ma NON E' UN ERRORE. Non è richiesta l'efficienza ma la funzionalità.
Per la posizione finale, il puntatore deve ritornare al punto dove era prima della chiamata GetDBFInfo e GetFieldInfo, mentre deve posizionarsi all'inizio del primo record, cioè alla fine dell'header, per la Open.
-- GianniCampanile - 21 Apr 2006
Mi scuso se la domanda sembrerà banale:
Visto che praticamente tutte le funzioni fanno uso di IsDBFHandle per verificare se quello passato è un handle valido non sarebbe meglio includere la suddetta funzione all'interno di LPC_Common.c invece di creare un apposito file .c?
-- TullioSebastiani - 21 Apr 2006
Due considerazioni:
1) è stato chiesto di creare un file separato per ogni funzione di interfaccia e un file comune per tutte le altre funzioni. Questo semplifica la correzione.
2) non c'è differenza dove sta la funzione, il link la trova lo stesso. Il fatto che tutte le funzioni non di interfaccia siano in uno stesso modulo è un'esigenza di correzione, non di programmazione. Anzi, l'ideale sarebbe, ove non vincolati da variabili static, di creare un file per ogni singola funzione.
-- GianniCampanile - 21 Apr 2006
Re: Re: Errore nel file Prova0.dbf ? - E anche in Prova33.dbf
Qualcosa davvero non mi torna.
Anche il file Prova33.dbf ha un nome errato nell'header; nella precedente risposta, il professore ha detto di fare in modo che il nostro programma funzioni anche in questo caso, in un modo o nell'altro.
Ma perché? Le specifiche dicono che i file Prova*.dbf sono stati creati tramite la CreateDatabaseFile del modulo 1, e quindi il nome che contengono deve per forza essere uguale al nome del file. Se il nostro codice deve rispettare le specifiche, perché deve avere un comportamento consistente anche con file che le specifiche non le rispettano?
Il mio programma l'ho strutturato in modo che legga il nome dall'header quando il database viene aperto, e cancella il file con quel nome (e estensione .$$$) quando il database viene chiuso. Questo comportamento rispetta le specifiche, ma i test non funzionano appunto perché Prova33.dbf contiene dati inconsistenti.
-- AlessandroPiva - 21 Apr 2006
Risultati modulo1
Ma questa warning:
src/LPC_DeleteDBF.c:88:2: warning: no newline at end of file
viene considerata come errore???spero di no!
-- AlessandroMarinelli - 21 Apr 2006
Re: Risultati modulo1
Qualunque Warning viene preso come "presenza di warning".
E' fodamentale testare il proprio codice su piu' piattaforme.
-- GianniCampanile - 24 Apr 2006
ritorno dell'errore
io uso per controllare isDBFHandle in tutte le funzioni e quando per esempio in DBFInfo viene passato un handle non valido stampo allo stdout due stringhe(una di isdbf e una di dbfinfo). e' corretto? non e' che viene valutato come errore questo output?
Test DBFInfo. Da eseguire dopo i test sulla Open
Test:[20201] Peso:[3] - [DBFInfo: Handle errato]
Errore [-1] in [IsDBFHandle]-->[Errore nei parametri]
Errore [-1] in [GetDBFInfo]-->[Errore handle non valido]
-- OrnelaDardha - 21 Apr 2006
Re: ritorno dell'errore
Evitate di stampare dal vostro codice, usate sempre e solo la funzione di errore. Per ora non viene valutato errore, ma potrebbe falsare la valutazione.
-- GianniCampanile - 24 Apr 2006
Re: Re: posizionamento del puntatore
ok per la posizione. però non ho ancora capito una cosa. la open deve far puntare il fp a fine file o alla fine dell'header??? al momento le due cose coincidono, ma nei moduli successivi non sarà più così...quindi
vorrei evitare malfunzionamenti per i moduli successivi
-- MarcoLaVecchia - 21 Apr 2006
Re: Re: Re: posizionamento del puntatore
All'inizio del primo record = fine dell'header.
-- GianniCampanile - 24 Apr 2006
OT: Warning dei test
Chiedo scusa per l'OT ma non so dove porre la domanda.
La mia compilazione dà i seguenti warning:
/usr/bin/ld: Warning: size of symbol `CreateDatabaseFile' changed from 2132 in lib/Modulo1.a(LPC_CreateDBF.o) to 10 in obj/LPC_Dummy.o
/usr/bin/ld: Warning: size of symbol `DeleteDatabaseFile' changed from 903 in lib/Modulo1.a(LPC_DeleteDBF.o) to 10 in obj/LPC_Dummy.o
A cosa sono dovuti? E perchè sulla mia macchina non erano presenti?
-- MassimilianoNatale - 21 Apr 2006
Re: OT: Warning dei test
Cosa c'è in LPC_Dummy.o ? Immagino ci siano le stesse funzioni che in Modulo1.a.
-- GianniCampanile - 24 Apr 2006
Posso usare la funzione IsDBFHandle dentro la funzione CloseDatabaseFile o OpenDatabaseFile?
-- IrisKonomi - 22 Apr 2006
Si. Come scritto sulle specifiche, a meno che non sia esplicitamente vietato, si possono usare altre funzioni di interfaccia nel codice.
-- GianniCampanile - 24 Apr 2006
Domande generali su (quasi) tutte le funzioni
1) Mi corregga se ho capito male: la OpenDatabaseFile, per quanto riguarda il controllo nel nome del file, fa praticamente gli stessi controlli della CreateDatabaseFile e della DeleteDatabaseFile, quindi basta praticamente ricopiare il codice già utilizzato (e le funzioni già create nell'altra LPC_Common.c).
Inoltre, da come ho capito, la OpenDatabaseFile si limita a fare i controlli sopra descritti e ad assegnare un handle a quel DBF (sta a noi decidere se immagazzinare poi tutti gli handle in un vettore, una pila, una lista, un file o quello che ci pare), più posizionare il puntatore di lettura/scrittura al primo byte dopo l'ultimo appartenente all'header (nel caso di un DBF vuoto questa posizione corrisponderà proprio alla fine del file, ma è solo un caso specifico).
Questo dubbio mi è venuto leggendo la specifica a pag 18 del refman.rtf in cui si afferma "Il record corrente viene settato a 1, anche se non ci sono record nel DBF."
Con questa frase intende quello che ho scritto prima, oppure che la OpenDatabaseFile deve scrivere questa informazione da qualche parte (per esempio un struttura del tipo DBF_INFO_t)? Personalmente quest'ultima ipotesi mi sembra assurda, a meno che la GetDBFInfo venga chiamata all'interno della OpenDatabaseFile. Per essere un po' più chiaro io ho creato una struttura per gli handles in cui ho un contatore numerico, che di volta in volta mi dice quanti handles ho assegnati in quel momento, e un vettore di strutture composte dal numero dell'handle, nome del file .dbf e puntatore allo stesso. Non mi sembra che la OpenDatabaseFile abbia bisogno di scrivere altre informazioni.
2) La GetDBFInfo legge l'header del DBF identificato dall'handle passato in input e converte e ricopia i dati nella struttura DBFInfo, allocata dal chiamante e che quindi non ci dobbiamo preoccupare di allocare (credo). Nel nostro caso (in cui non abbiamo scritto ancora nessun record) il record corrente è 1 (e fin qui ok) e anche il puntatore di lettura/scrittura viene impostato (dalla OpenDatabaseFile) alla posizione dell'eventuale primo record. Siccome però le nostre funzioni devono funzionare anche nei moduli successivi, per calcolare il record corrente in pratica dovrei vedere qual è l'offset del puntatore di lettura/scrittura a partire dalla fine dell'handle e, grazie agli opportuni confronti, vedere a quale record mi sto riferendo in questo momento (nel caso di offset==0 cmq il record corrente e' 1)?
3) Per come ho implementato io la struttura di gestione degli handles, questi non avranno mai valori numerici minori di 0 o maggiori di (MAX_DBF_OPEN-1), perchè mi è sembrata la soluzione migliore. A questo punto la mia funzione IsDBFHandle si deve solo limitare a vedere se l'handle in input è compreso tra questi due valori, o se corrisponde SOLO ad un handle in uso (cioè l'identificativo di un file effettivamente aperto)?
4) la GetFieldInfo prevede che ci sia un errore in caso di NumFields <0 (e ok) prevede che se NumFields==0 io debba leggere le informazioni di TUTTI i campi del record descritti nell'header e che se invece NumField è un numero ben preciso noi dobbiamo leggere NumFields campi del record dall'header (a partire dal primo). In ogni caso (a parte FieldData==NULL) dobbiamo ritenere che la memoria allocata per il vettore di strutture sia sempre sufficiente a contenere i campi che vogliamo leggere? (mi sembra un concetto molto simile a quando, nel primo modulo, dovevamo scrivere NumFields elementi del vettore FieldData nell'header... in quel caso ho dato per accertato che nel vettore ci fossero proprio NumFields elementi, anche xkè se fossero stati di più, questi sarebbero stati semplicemente ignorati, mentre se fossero stati di meno sarebbe andato in segmentation fault, credo)
(La prego di non rimandarmi a post precedenti, perchè li ho letti tutti e i miei dubbi sono scaturiti lo stesso
).
Chiedo scusa a tutti per aver scritto così tanto...
-- DanieleSchirmo - 22 Apr 2006
Re: Domande generali su (quasi) tutte le funzioni
1) Ok.
2) Ok.
3) Questo lo decida lei e verifichi con i test.
4) La struttura passata e' sempre allocata correttamente, sia se NumFields > 0 che se NumFields = 0. Attenzione che nel caso NumFields > 0 dovete leggere esattamente le informazioni dei campi richiesti, non "i primi NumFields campi".
-- GianniCampanile - 24 Apr 2006
ordine dei test
gentile prof, lei ha detto in un topic precedente che i test sono eseguiti da lei in ordine. Ok questo vuol dire che ha senso la combinazione test 1 e poi test 6????? in questa situazione, il mio programma va in loop, perchè nel test 20602 trovando un handle di troppo,
non esce mai dal ciclo in quanto esegue sempre l'else....
al contrario se io eseguo tutti i test in ordine dopo il test 1 faccio il test 5(close) che mi cancella quell'handle in più...
-- MarcoLaVecchia - 23 Apr 2006
Re: ordine dei test
Eseguite i test in sequenza 1,2,3,etc.
-- GianniCampanile - 24 Apr 2006
Cursore nel file del DBF e errori riperquotibili in altri moduli
Ho finito di editare, ho compilato con make all e ho fatto tutti i test (dall'1 al 7 uno dopo l'altro e poi anche il 6 e il 7 separatamente) ottenendo sempre 100. A parte che ho anche io il problema descritto da MarcoLaVecchia (facendo per primo il test 1 e per secondo il test 6), volevo sapere come mi devo comportare con il cursore del file DBF.
Cioè, quando apro un DBF, come da specifiche, il cursore si posizionerà al primo byte dopo l'header (record corrente = 1).
Invece, quando utilizzo le funzioni GetDBFInfo e GetFieldInfo, io ho ragionato così: ricevo un file del quale non sono tenuto a sapere a priori dove si trovi il cursore, per cui memorizzo la sua posizione, eseguo le letture che mi interessano, e infine ripristino la posizione che aveva inizialmente.
Inoltre per il calcolo del record corrente (visto che non ho capito bene le specifiche sono andato un po' a logica) ho dato per accertato che il cursore si trovi sempre sul primo byte di un qualsiasi record e poi, con un piccolo calcolo, ricavo a quale record si riferisce (se sta sul primo byte dopo l'header si riferisce al primo record -> record corrente = 1 , se sta sul primo byte del 4° record -> record corrente = 4 , se sta sul byte di fine file e ho 2 record -> record corrente = 3). Ho fatto bene?
In ogni caso, può capitare che i test di questo modulo vengano passati, ma a seconda di come abbiamo risolto questi altri problemi (tipo il cursore) potremmo fallire i test del prossimo modulo?
In questo ultimo caso non si potrebbero più modificare i files?
Grazie
-- DanieleSchirmo - 23 Apr 2006
Re: Cursore nel file del DBF e errori riperquotibili in altri moduli
Tutto corretto. Ogni modulo e' indipendente, nel senso che per ogni modulo vi viene fornita una libreria del modulo precedente, in modo da essere sicuri che il codice sia corretto e che il modulo in corso non abbia problemi da errori precedenti.
-- GianniCampanile - 24 Apr 2006
Re: Re: Cursore nel file del DBF e errori riperquotibili in altri moduli
scusi, quindi ho sbagliato a utilizzare il mio modulo uno per fare il secondo??? io ho fatto cosi' per utilizzare le funzioni del mio modulo 1 presenti in Common.c del primo modulo...Mi sembrava inutile ricopiare funzioni gia implementate...
-- MarcoLaVecchia - 24 Apr 2006
Re: Re: Re: Cursore nel file del DBF e errori riperquotibili in altri moduli
Noi testiamo con la nostra libreria. Se la vostra rispetta bene le specifiche non dovrebbero esserci problemi. Il consiglio e' di utilizzare la libreria fornita da noi.
-- GianniCampanile - 24 Apr 2006
warning: incompatible implicit declaration of built-in function ?strcpy?
Salve, vorrei sapere da che cosa può dipendere questo warning, dato che uso semplicemente una strcpy........!!!!
-- Users.691942 - 24 Apr 2006
Re: Re: Re: Cursore nel file del DBF e errori riperquotibili in altri moduli
Io anche ho dato per scontato riutilizzare alcune funzioni dichiarate nella LPC_Common.c del Modulo1 (che poi sono state immagazzinate nella libreria Modulo1.a mia personale).
Quindi per compilare e poi eseguire il programma non ho utilizzato la vostra libreria, ma la mia.
Voi il test lo fate con le nostre librerie o con la vostra?
E' meglio che ridichiaro queste funzioni anche nella LPC_Common.c del Modulo2 (e relativo LPC_M2_Include.h) e compilo con la vostra libreria, oppure no?
Grazie
-- DanieleSchirmo - 24 Apr 2006
Re: Re: Re: Cursore nel file del DBF e errori riperquotibili in altri moduli
Ho risposto sopra. Qualunque funzione non di interfaccia deve essere presente in LPC_Common.c di ogni modulo, anche se si tratta di codice ripetuto.
-- GianniCampanile - 24 Apr 2006
DECODIFICA HEADER DA NBO A HBO
Scusi Professore ho un problema, quando decodifico il campo NumFields letto dall'Header file con la funzione NTOHS ottengo un valore '1536' anzichè '6', se invece non applico tale decodifica leggo direttamente '6'...cosa sbaglio? faccio presente che ho un Pc con cpu AMD sempron con Windows 2000. grazie per l'attenzione.
-- GiovanniLucaSorrentino - 24 Apr 2006
isDBFHandle
Scusi professore non ho capito benne il controllo sul handel.
Le facciuo un esempio della mia interpretazione: se viene passato un handle (cioè un inreto) superiore al indice max del array deve dare errore, poichè l'handel risulta non essere corretto.Questo è il solo caso in cui risulta errato?
-- AlessandroCasciaro - 24 Apr 2006
TEST 20502 (CLOSEDBF)
un'altro difetto che ho riscontrato è che se effettuo, a fronte di ripetute chiamate di apertura files dal menu di test, ripetute chiamate di chiusura, solo la prima chiamata chiude l'handle mentre le successive no e questo perche' il numero di handle resta uguale a quello della ultima chiamata di open, c'e' un modo per aggiornare il numero di handle? chiarisco che uso un vettore che incremento di volta in volta. grazie ancora.
-- GiovanniLucaSorrentino - 24 Apr 2006
time stamp & handle
anche se puo' essere scontata faccio la seguente domanda:
nella close va aggiornato il time stamp o se ne occupera' qualche altra funzione nei prossimi moduli ?
-- WalterValentini - 25 Apr 2006
Re: time stamp & handle
Il timestamp registra la data/ora dell'ultima modifica. In questo modulo non vengono effettuate modifiche al DBF.
-- GianniCampanile - 25 Apr 2006
la funzione IsDBFHandle deve controllare se un handle è compreso tra 0 e MAX_DBF_OPEN oppure deve controllare se l'handle è stato prodotto dalla fuzione OpenDatabaseFile
-- LucaTartaglia - 25 Apr 2006
valore del puntatore della funzione GetDBFInfo()
professore vorrei sapere de il puntatore ke dobbiamo passare nell struttura DBFInfo è il puntatore all'inizio del file o alla posizione corrente del puntatore???
-- StefanoLAVAGNO - 26 Apr 2006
valore del puntatore della funzione GetDBFInfo()
professore vorrei sapere de il puntatore ke dobbiamo passare nell struttura DBFInfo è il puntatore all'inizio del file o alla posizione corrente del puntatore???
-- StefanoLAVAGNO - 26 Apr 2006
la documentazione dice che se NumFields e' uguale a 0 la funzione deve allocare l'array, ma cosi' il chiamante non puo' ricevere il blocco allocato dalla funzione (la funzione prende come parametro un puntatore semplice).
ho letto il test corrispondente, e ho visto che a quel parametro il test passa un array gia' allocato (nello stack) di dimensione MAX_NUM_FIELDS, quindi e' possibile che si tratti di un errore nella documentazione e che in realta' con NumFields = 0 si debba assumere che l'array sia gia' allocato e abbia dimensione MAX_NUM_FIELDS?
-- StefanoLombardi - 26 Apr 2006
Mi permetto di rispondere alla tua domanda (sperando possa esserti d'aiuto) copiando queste righe prese dalla pagina principale di questo corso:
"Nella GetFieldInfo(): anche in caso di NumFields = 0, l'allocazione delle strutture deve essere fatto dal chiamante. Non vi dovete quindi preoccupare di allocare le strutture."
Dovrebbe essere proprio la risposta che cercavi. Probabilmente la documentazione presente nel file del modulo2 era scritta in modo errato, ma nella pagina principale del corso è stata poi chiarificata la situazione.
-- DanieleSchirmo - 26 Apr 2006
Nella pagina principale del corso si legge:
"La funzione IsDBFHandle() non deve ritornare errore se l'handle non è valido, in quanto è proprio lo scopo della funzione".
Significa che la funzione ritorna LPC_OK oppure LPC_BAD_ARG, ma senza chiamare mai la LPC_GestioneErrore?
-- DanieleSchirmo - 26 Apr 2006
Re: DECODIFICA HEADER DA NBO A HBO
Perchè nessuno risponde?Anche io ho lo stesso problema...ho un intel centrino 1,6 e sto programmando su una suse 9.2.
-- AlessandroMarinelli - 27 Apr 2006
C'è scritto che GetDBFInfo deve fare calcoli per calcolarsi il record corrente. Io tuttavia lo memorizzo il record corrente nella struttura dell'handle, assumendo (direi ragionevolmente?) che le funzioni che lavoreranno sui record, avendo accesso all'handle, possano aggiornare il valore di volta in volta (visto che anche internamente può essere utile). Come bisogna comportarci?
-- MicheleBalistreri - 27 Apr 2006
La documentazione non era errata, perché "il chiamante" è l'utilizzatore della funzione, ma ha ingenerato molti dubbi. Non ho risposto prima proprio perché era un tema già trattato e spiegato. In ogni caso il vettore di strutture non potrebbe essere allocato all'interno della funzione perché il puntatore è passato per valore, quindi chiude il suo scope all'interno della funzione.
-- GianniCampanile - 27 Apr 2006
Re: Dubbio sul return di IsDBFHandle
Si, non deve chimare la funzione di errore.
-- GianniCampanile - 27 Apr 2006
Questo è esattamente quello che NON va fatto. E' stato detto esplicitamente piu' che il numero del record corrente non va memorizzato ma va ricalcolato tutte le volte.
Nessun modulo ha accesso alle informazioni definite internamente da un altro modulo, quindi non potrebbe aggiornare il valore in memoria.
-- GianniCampanile - 27 Apr 2006
Re: Re: DECODIFICA HEADER DA NBO A HBO
Il motivo della mancata risposta è che e' un errore che non si può verificare, a patto che il dato sia letto correttamente e il tipo utilizzato sia della dimensione giusta. Forse leggete a partire da un byte errato.
-- GianniCampanile - 27 Apr 2006
E' possibile avere la libreria del modulo 1 compilata per architetture PowerPC?
-- FrancescoSimoneschi - 27 Apr 2006
Re: Re: Re: DECODIFICA HEADER DA NBO A HBO
Professore sono sicuro che nn leggo dal byte sbagliato.Lei ha verificato che sia tutto ok nei dbf test?anche perchè mi sembra che il valore 6 in nbo sia 1536 o no?
-- AlessandroMarinelli - 27 Apr 2006
Re: Re: Re: DECODIFICA HEADER DA NBO A HBO
Il parametro NumFields della CreateDatabaseFile() è un int, mentre il numero dei campi da inserire nell'header è uno short. Alcuni compilatori potrebbero dare un warning nell'assegnazione di un int ad uno short: in questo caso questo specifico warning non sarà considerato un err .
Questo è un errore nelle specifiche del nel modulo1.
Ora anche io ho un problema nella codifica del numfield.l mia domanda è , è possibile che quest'errore si riperquota nel modulo 2.Poichè prende un intero e poi scrive l'intero come short nel header quindi se è così inevitabilmente quando noi andremo a decodificare il valore lo troveremo diverso da 6 .
-- AlessandroCasciaro - 27 Apr 2006
Re: Re: Re: DECODIFICA HEADER DA NBO A HBO
Nei byte del numero di campi sui dbf ci sono i valori 0x00 0x06 che e' la rappresentazione in NBO del valore 6. Se nel buffer che leggete ci sono questi valori IN QUEST'ORDINE allora la conversione htons non potrà che essere corretta. Se non ci sono questi valori, allora state leggendo i byte sbagliati.
In nessun caso il passaggio int/short pregiudica questo, né nel modulo 1 né in nessun altro modulo.
-- GianniCampanile - 27 Apr 2006
fread()
Ma la fread sposta la posizione dello stream alla qtà di dati letti?
Se la risposta è si perchè non è riportato nelle man pages!?
-- FabioFossati - 28 Apr 2006
Re: fread()
Si, avanza.
In effetti sul man non e' riportato, però basta cercare un esempio su internet per vedere come si usa correttamente.
-- GianniCampanile - 28 Apr 2006
gestione errori fread() ed fseek
ad ogni chiamata a queste due funzioni va controllato se tutto è andato come ci si aspettava e, in caso contrario, va chiamata LPC_GestioneErrore???
Lo chiedo perchè queste sono le due funzioni che più uso in questo modulo e,gestendo ad ogni chiamata l'errore...perdo un pò di leggibilità del codice!
-- GiuseppeLisanti - 28 Apr 2006
Problemi test misto
Ho un problema sul test misto, cioe' tutte le funzioni mi danno 100,tranne il test misto che mi da 0.
Usando il DDD per veder eventuali errori, ho scoperto che invece i test del test misto li passa tutti.
-- OnelioCancellieri - 28 Apr 2006
Re: gestione errori fread() ed fseek
Si.
Capisco il problema della leggibilità che infatti in linguaggi OO e' stato risolto elegantemente con l'exception, ma l'errore va gestito per ogni chiamata.
-- GianniCampanile - 28 Apr 2006
Re: Problemi test misto
Non ho capito se con il DDD passa i test. Se e' così vuol dire che il programma e' "instabile", nel senso che il passaggio dei test dipende dal sistema operativo, dalla situazione della memoria etc.
Il Test Misto fa una serie di operazioni consecutive, provi a cercare quale di quelle crea una situazione di errore. Ovviamente durante i vostri tst potete modificare il programma di test come volete, inserendo printf e quant'altro per aiutarvi nell'errore. Al termine ripristinate la versione originale.
Un altro consiglio: testate su più sistemi possibili, meglio ancora se un po' datati perché meno controllati e quindi piu' "cattivi".
-- GianniCampanile - 28 Apr 2006
Test 20104 Prova.dfb è vuoto
La mia funzione Open, cerca di leggere nel file Prova.dbf la fine dell'header, per posizionare il puntatore di lettura/scrittura al primo record. Ma essendo Prova.dbf vuoto, mi torna errore in lettura e non mi passa il test 20104 che si aspetta 0 come ritorno. Perchè questo file è vuoto? E' giusto che mi torna errore?
-- CarmeloPalummo - 28 Apr 2006
Salve professore, le volevo chiedere una cosa: nella GetDBFInfo dopo aver letto le informazioni dall'header del database dove bisogna posizionare il filepointer del database?
-- GianpieroVenditti - 28 Apr 2006
Re: Re: Re: DECODIFICA HEADER DA NBO A HBO
scusi prof.
io ho lo stesso prob. cioè leggo il valore con la fread e viene memorizzato nel buffer
ma i valore nel buffer sono int e se faccio la conversione in NBO ottengo dei valori sballati
es
il numero dei campi è 6
nel vettore ho 0 6
e se faccio la conversione ottengo 15.....ecc
com è possibile??? ma la conversione deve essere fatta???
-- IreneBucci - 28 Apr 2006
Re: Re: Re: Re: DECODIFICA HEADER DA NBO A HBO
Io ho risolto ma leggendo dal byte n°11....è giusto...nn dovrei posizionarmi al byte n°12?Non è che avete sbagliato a memorizzare nel dbf?
-- AlessandroMarinelli - 28 Apr 2006
Re: Test 20104 Prova.dfb è vuoto
Risolto, ho riscaricato il Modulo2 ed il file non è vuoto! Ci deve esser stato un errore quando l'ho scaricato la prima volta.
-- CarmeloPalummo - 28 Apr 2006
Re: Re: Re: DECODIFICA HEADER DA NBO A HBO
La lunghezza del nome file e' di 10 bytes + il NULL = 11.
Ovviamente se caricate in un buffer o se fate una fseek, partendo da 0 dovete leggere la posizione 11, cioè il 12esimo byte.
-- GianniCampanile - 28 Apr 2006
Consegna
volevo sapere se nel file modulo.zip che si deve consegnare vanno messi solo i file creati da noi più il readme o se tutta la cartella del modulo
-- LucaDiFilippo - 29 Apr 2006
EOF
Scusi professore ma si puo usare la funzione feof() per verificare se un file pointer è arrivato a fine file?
-- GianpieroVenditti - 29 Apr 2006
riguardo il currentrecord nella struttura dell'handle
Salve, nelle specifiche c'è scritto che nella struttura dell'handle dovremmo memorizzare almeno il filepointer, il nome del file ed il record corrente.
E' proprio quest'ultimo dove ho il dubbio, ho già fatto 4 funzioni su 5 (sto terminando la GetFieldInfo) ma non mi sembra che in nessun caso bisogna spostare questo valore dal primo campo (valore 25, impostato quando si effettua la opendatabase), anche perche i test non possono controllare questo valore in quanto ognuno può aver fatto una struttura diversa!
Forse mi sfugge qualcosa, ma volevo chiedere prima di terminare, per chiarimento almeno; ciao & grazie dell'eventuale risposta!
-- ValerioColtre - 29 Apr 2006
Re: Consegna
Fate un tar.gz dei soli moduli .c, .h e readme.
-- GianniCampanile - 29 Apr 2006
Re: EOF
e perché no ?
-- GianniCampanile - 29 Apr 2006
Re: riguardo il currentrecord nella struttura dell'handle
cos'è la "struttura dell'handle" ?? Intende DBF_INFO_t ? Legga bene le specifiche e le risposte date in questa pagina.
-- GianniCampanile - 29 Apr 2006
Re: Consegna
tar.gz o zip?
-- OrnelaDardha - 29 Apr 2006
Opendb
Quando apro un db devo creare un file .$$$
ma se x caso c'è un errore nella creazione del file $$$ che errore devo riportare?? non è mi ben chiaro
(penso LPC_FILE_ACCESS o LPC_ERR_READ... almeno credo XD)
-- LucaMargiani - 29 Apr 2006
Problema Test
Il mio Problema e' che quando testo la funzione GetDBFInfo nel test 20204 mi da 1, ma quando faccio la scelta 7 nella schermata di tutti i test passati, nel test 20204 mi da 0. Non capisco il motivo
-- OnelioCancellieri - 29 Apr 2006
Re: Opendb
LPC_FILE_ACCESS
-- GianniCampanile - 30 Apr 2006
Re: Problema Test
O c'e' un errore della funzione oppure c'è un errore nella sequenza di test. Ricopi nuovamente tutti i files dbf e esegua SOLO il test 7. Questo test non è altro che l'esecuzione in sequenza degli altri.
-- GianniCampanile - 30 Apr 2006
LPC_ERR_READ
Potrebbe far alcuni esempi nel caso in cui la funzione dovesse tornare questo errore??? tutti quelli che penso io sono destinati ad un LPC_ERR_SEEK piu che un LPC_ERR_READ
grazie
-- LucaMargiani - 30 Apr 2006
ripetere il test più volte
è normale che se ripeto il tesft di valutazione due volte mi va in segmentation fault?oppure se lo faccio dopo il test 6 il voto è minore?
-- AlessandroCasciaro - 30 Apr 2006
Re: LPC_ERR_READ
Ora ci sono arrivato
non ci avevo ancora pensato alla lettura XD
-- LucaMargiani - 30 Apr 2006
Formato di Consegna
Buongiorno professore, volevo sapere se per la consegna bisogna creare un .zip oppure un .tar.gz Grazie
-- GianpieroVenditti - 30 Apr 2006
Re: Formato di Consegna
E' meglio un tar.gz.
-- GianniCampanile - 1 Mag 2006
DBF Name
guardando bene i test
ho notato questo:
if (strcmp(DBFInfo.Name, "SgNaRf"))
test[numtest].passed = 1;
vuol dire che controlla se il nome del db è SgNaRf...
precisazione: sgnarf è come si dovrebbe chiamare il db da dentro (cioè il campo dbfname alll'inizio dell'header) mentre il file fisico
si chiama prova0.dbf
cosa vuol dire? a quale nome dobbiamo fare riferimento??
-- LucaMargiani - 30 Apr 2006
Re: DBF Name
Il controllo viene fatto sul nome che viene caricato dalla funzione GetDBFInfo() che DEVE essere quello scritto nell'header e non il nome del file.
-- GianniCampanile - 1 Mag 2006
consegna file readme
ho notato che nel log della decompressione viene cercato il file "readme.txt" mentre nelle specifiche del PDF il file è chiamato "Readme.txt"... volevo solo sapere come va nominato evitando quindi di farvi risultare non presente un file in realtà presente che rispetta le specifiche?!?
-- StefanoLAVAGNO - 30 Apr 2006
Re: consegna file readme
il nome corretto e' Readme.txt, come sulle specifiche. Dato che sono stati consegnati nomi diversi (readme, readme.txt, lpc_m1_include etc.) vengono fatte diverse ricerche, per vernvi incontro. Dal Modulo3 dovrete rispettare le specifiche in modo più puntuale.
-- GianniCampanile - 1 Mag 2006
include nei file di test
Se nel file TestM2.c lascio include "LPC_Include.h" non mi trova le funzioni che ho scritto. Se modifico il file con include dei file che contengono le funzioni allora funziona...non capisco come devo fare.
-- MariantoniettaTognazzi - 30 Apr 2006
Re: include nei file di test
Se per "funzioni che ho scritto" intende le funzioni di interfaccia, cioè la InsertBlankRecord() etc. allora non capisco quello che dice, perché se viene trovato il file LPC_Include.h questo contiene le definizioni corrette. forse ha scritto le funzioni in modo diverso, non rispettando le maiuscole e minuscole.
-- GianniCampanile - 1 Mag 2006
Information Hiding
gentile Professore
Per una corretta information hiding è giusto dichiarare come static, nel file LPC_Common.c, l'implementazione della gestione dell'hendle
(es:
static struct Myhandle{
...
...
} Myhandle
inserendo nel file LPC_M2_Include.h SOLO le intestazioni delle funzioni che operano sull'handle?
Io ho fatto così perche in questo modo sono note solamente le funzioni, ma non la struttura dell handle, ma non sono sicuro se sia o meno la strada giusta per i moduli successivi. Grazie
-- MarcoValentini - 30 Apr 2006
Re: Information Hiding
I moduli successivi utilizzeranno la nostra libreria, quindi non avranno problemi. In ogni caso è corretto dichiarare la struttura come static, ma poi non può accedervi dalle altre funzioni InsertBlankRecord() etc.
-- GianniCampanile - 1 Mag 2006
Re: ripetere il test più volte
Ciao, spero di esserti ancora utile, ci sono delle anomalie nei test ma se eseguiti in sequenza anche piu' volte ripetutamente non danno errore se le funzioni si attengono letteralmente alle specifiche.
importante: eliminare tutti i file .$$$ nella cartella test prima di testare.
Il problema che hai tu e' dovuto al fatto che nella OpenDatabaseFile in caso di handle esauriti hai scordato un passaggio IMPORTANTISSIMO.
sui test: la sequenza di esecuzione dei test: 1-1-2-3-4-5-6 oppure 1-6 fallisce perche' nel test 20104 si toglie solo il lock sul file Prova.$$$ e non si cancella l'handle relativo che rimane occupato, e di conseguenza il test 20601 dopo aver eliminato tutti i files ProvaX.$$$ (tranne Prova.$$$) si aspetta di avere 32 handle liberi, in realta sono 32 meno ogni esecuzione in piu' di Open esempio:
1-1-6: handle liberi(32-1). 1-1-1-6: handle liberi(32-2).
Buon 1° Maggio a tutti!!!!!
-- RoccoPanduri - 01 May 2006
Re: Re: ripetere il test più volte
quale sarebbe questo passagio ci sto pensando e provando da un sacco di tempo a farlo girare a cnhe se ripeto più volte il test ma niente.
-- AlessandroCasciaro - 01 May 2006
Re: Re: ripetere il test più volte
problema risoto. Ho un'ultima domanda da chiuedervi.
Ma il file Prova33.$$$ vi si cancella a voi perchè mi pare che nel test non venga passato alla close per cancellarlo e non c'è neanche nessuna istruzione che lo cancelli
-- AlessandroCasciaro - 01 May 2006
Re: COME FARE I TEST
Per essere abbstanza sicuri che tutto funzioni, cercate di eseguire i test su più macchine possibili. eliminate tutti i file .$$$ e eseguite i test IN SEQUENZA 1,2,3,4,5,6. Rifate lo stesso procedimento (eliminando i .$$$ e poi i test) per più volte. Questa è la sequenza che eseguiremo noi.
-- GianniCampanile - 1 Mag 2006
Information Hiding
Ma definendo delle funzioni che mi permettono di operare sulla struttura, a me dovrebbe interessare solo che gli altri moduli "vedano" le funzioni che ho definito?? E' corretto o sbaglio qualcosa in questo ragionamento?
-- MarcoValentini - 01 May 2006
Eseguo test.
I test da 1 a 5 mi funzionano regolarmente mentre il test 6 al 40% passa solo il 6.1 e percio quando sul test 7 devo eseguirlo almeno tre volte per eliminare tutti i .$$$ come mai?
-- IrisKonomi - 01 May 2006
Re: Information Hiding
E' corretto. Se riesce ad isolare l'accesso alla struttura alle sole funzioni di LPC_Common.c allora funziona tutto.
-- GianniCampanile - 01 May 2006
Re: Eseguo test
Non passate al test successivo se ci sono problemi. Se il test 6 non funziona, e' inutile provare il 7, bisogna risolvere i problemi che ci sono.
-- GianniCampanile - 01 May 2006
Re: Re: include nei file di test
Buonasera professore, si intendo le funzioni di interfaccia.Ho controllato più volte le definizioni delle funzioni e sono giuste , ma mi dice che le funzioni non sono state definite.Grazie.
-- MariantoniettaTognazzi - 01 May 2006
compilazione modulo3 in assenza del modulo2
Si può svolgere il modulo tre senza aver svolto il modulo2?
Compilando il modulo tre con make test ottengo errori di undefined reference relativamente alle funzioni del modulo due delle quali naturalmente non ho i sorgenti.. Da che dipende? qualcuno mi può aiutare? Grazie ciao
-- LuigiRotili - 27 May 2006
No such template def TMPL:DEF{PROMPT:thread}
- Se usate dei titoli comprensibili ci capiamo tutti un po' meglio
- Ricordatevi di chiudere i tag che inserite nei post.
- Non parite con i flame, c'è una pagina apposta per gli OffTopic.
-- AndreaSterbini - 4 Apr 2006