Tags:
create new tag
view all tags

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

isDBFHandle() e GetDBFInfo()

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

Chiarimento su GetDBFInfo()

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 wink


-- 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. smile

-- 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% smile

-- 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 smile 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 smile ). 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 frown

-- 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

Test IsDBFHandle()

Come mai quando viene fatto il test completo su tutte le funzioni non viene incluso il test sulla funzione IsDBFHandle() ?

-- MassimilianoNatale - 08 Apr 2006
Re: Test IsDBFHandle()
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

IsDBFHandle

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

Re: IsDBFHandle
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

domanda sulla OpenDatabase()

é' 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

Re: domanda sulla OpenDatabase

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" wink

-- 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 wink

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ì. smile 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

re: PopOI

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

Re: Re: PopOI?
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

TestMisto()

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 smile 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.... wink

-- 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 smile 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 wink

-- 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? smile

-- 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

chiarimento su RecordLen

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 &#65533; 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

Dubbio GetFieldInfo

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

Re: Dubbio GetFieldInfo

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

GetFieldInfo

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

Re: GetFieldInfo

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

Controllo campi GetFieldInfo()

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

Re: Controllo campi GetFieldInfo()

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

CloseDatabase

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

IsDBFHandle

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

Re: IsDBFHandle

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

IsDBFHandle??

Posso usare la funzione IsDBFHandle dentro la funzione CloseDatabaseFile o OpenDatabaseFile?

-- IrisKonomi - 22 Apr 2006

Re: IsDBFHandle??

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 big grin ).

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

IsDBFHandle

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

GetFieldInfo con NumFields = 0

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

Re: GetFieldInfo con NumFields = 0

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

Dubbio sul return di IsDBFHandle

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

GetDBFInfo e CurrentRec

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

Re: Re: GetFieldInfo? con NumFields? = 0
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

Re: GetDBFInfo? e CurrentRec?

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

Modulo 1 per PowerPC

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

File pointer della GetDBFInfo

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 big grin

(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 big grin 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

Edit | Attach | Watch | Print version | History: r258 < r257 < r256 < r255 < r254 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r258 - 2007-03-15 - StefanoGuerrini






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback