Domande sul ModuloQuattro (modifica, lettura e ricerca di record)

In questa pagina potete porre domande sul ModuloQuattro.

Vi prego di inserire un titolo che chiarisca che tipo di domanda state ponendo.


Parametri nei prototipi delle funzioni

Leggendo i prototipi dell funzioni di questo modulo, nel file LPC_Include.h manca il parametro int NumValues che invece è presente nelle specifiche. Quindi nel file di include le funzioni ReadRecord() e LocateRecord() hanno un parametro in meno rispetto alle specifiche. Come ci comportiamo??

-- GiuseppeLisanti - 24 May 2006

Conversione di un double da/in Network Byte Order

Come richiestomi dal prof. Sterbini pubblico le costanti che possono risultare utili per realizzare questa funzione in modalità multipiattaforma,come suggerisce il nome queste costanti vengono definite in automatico a seconda della macchina su cui si sta lavorando,quindi basta specificarle così come sono in un #ifdef
#ifdef __LITTLE_ENDIAN
...
#endif

#ifdef __BIG_ENDIAN
...
#endif
-- ValerioMauro - 24 May 2006

Re: Conversione di un double da/in Network Byte Order

Come non detto il codice di prima era errato :D. Ecco la versione corretta
#include<endian.h>
...
#if __BYTE_ORDER==__LITTLE_ENDIAN
...
#endif
#if __BYTE_ORDER==__BIG_ENDIAN
...
#endif
-- ValerioMauro - 24 May 2006

Re: Parametri nei prototipi delle funzioni

E' in linea la nuova versione del modulo LPC_Include.h.

-- GianniCampanile - 24 May 2006

Nuovo LPC_Include.h

Lo possiamo già sostituire al vecchio LPC_Include o dobbiamo attendere la consegna del Modulo3 per non creare problemi?

-- PaoloParlapiano - 25 May 2006

Re: Nuovo LPC_Include.h

Si può già sostituire.

-- GianniCampanile - 25 May 2006

Re: Re: Conversione di un double da/in Network Byte Order
Se lo sto compilando, ad esempio, per una macchina little endian che devo fare dopo quell'#if __BYTE_ORDER==__LITTLE_ENDIAN?

-- EmanueleGallo - 26 May 2006

Chiarimento specifiche

Ho dato uno sguardo alle specifiche. Nella funzione EditRecord() c'è quella struttura FieldValue che ci dice quale campo andare a modificare giusto? Però c'è scritto anche che i campi nel Database File possono non essere nell'ordine in cui sono in quella struct. Quindi noi come facciamo a capire se nel database file c'è prima un campo CHARACTER o LOGICAL, ad esempio?

-- EmanueleGallo - 26 May 2006

Re: Chiarimento specifiche

Attenzione che FieldValue e' un vettore di strutture. Le informazioni sui campi le dovete ottenere leggendole direttamente o tramite altre funzioni.

-- GianniCampanile - 26 May 2006

Gestione degli errori e aderenza alle specifiche

Nella gestione dell'errore di una funzione interna o di sistema, ad esempio un errore di fwrite(), e' considerato non aderenza alle specifiche passare alla LPC_GestioneErrore() una generica stringa di errore, del tipo "errore di scrittura", invece di inserire nella stringa informazioni aggiuntive, come il valore ritornato dalla fwrite(), come nell'esempio della documentazione? Nella documentazione si dice che "Il messaggio di errore e' una stringa che PUO' contenere le informazioni aggiuntive per il miglior monitoraggio dell'errore" quindi non dovrebbe essere obbligatorio, ma chiedo conferma.

-- AlessandroAgostini - 26 May 2006

Re: Re: Re: Conversione di un double da/in Network Byte Order
devi effettuare l'inversione dei byte dopo aver prelevato da file e prima di scriverci su

-- ValerioMauro - 28 May 2006

Re: Re: Re: Conversione di un double da/in Network Byte Order
Ah devo usare le funzioni che usiamo per convertire i byte?

-- EmanueleGallo - 28 May 2006

Re: Re: Re: Re: Conversione di un double da/in Network Byte Order
No,devi scindere i byte di un double ed invertirne l'ordine,e poi riscriverli nel file o nella variabile che sia in questo ordine invertito

-- ValerioMauro - 28 May 2006

Re: Gestione degli errori e aderenza alle specifiche

Non e' un errore, ma visto che uno scrive una stringa cosa costa aggiungere la stampa dell'errno ? Comunque non è un errore.

-- GianniCampanile - 29 May 2006

Problema nelle specifiche di ReadRecord

Ciao!

La specifica di ReadRecord dice che, anche nel caso in cui NumValues == 0, è responsabilità del chiamante allocare il vettore FieldValues SIA i vari "value" di ogni struttura del vettore.

Compilando e testando il mio codice seguendo tali specifiche, tuttavia, l'ultimo test di ReadRecord fallisce perché viene chiamata con NumValues == 0, e il campo "value" di una struttura FieldValues è un puntatore nullo, quindi non allocato.

Vorrei chiarimenti su questo punto delle specifiche, grazie (penso comunque che sarebbe logico che fosse ReadRecord ad allocare la memoria necessaria per value).

Grazie


-- AlessandroPiva - 29 May 2006

Warning nella compilazione di TestM4.c

Ho notato che la compilazione di TestM4.c genera dei warnings, che possono essere risolti includendo <string.h> e <memory.h> nel file.

Ciao


-- AlessandroPiva - 29 May 2006

Re: Warning nella compilazione di TestM4.c

Sono scomparsi i nomi delle librerie dal mio precedente messaggio. Rieccolo scritto:

### Ho notato che la compilazione di TestM4?.c genera dei warnings, che possono essere risolti includendo string.h e memory.h nel file.

Ciao ###


-- AlessandroPiva - 29 May 2006

Re: Re: Warning nella compilazione di TestM4.c
Giusto, grazie. Metterò una nota.

-- GianniCampanile - 29 May 2006

Re: Problema nelle specifiche di ReadRecord

Per favore indichi il numero del test. In ogni caso la ReadRecord deve proprio testare che ogni parametro passato sia valido. Non è una buona programmazione allocare all'interno della ReadRecord() per poi liberare nella funzione chiamante. Per questo motivo, in sistemi più completi, esistono delle funzioni apposite di "Prepare" del vettore che dovrà contenere i dati, che eseguono solo l'allocazione.

-- GianniCampanile - 29 May 2006

Re: Re: Problema nelle specifiche di ReadRecord
Come non detto, mi scusi. Avevo messo una memset di troppo, che azzerava i puntatori value oltre ai nomi dei campi... Tolta quella memset va tutto OK.

Comunque è vero, avevo dimenticato quel vecchio adagio di Kernighan e Pike: "deallocare le risorse allo stesso livello di dove vengono allocate" smile Sono troppo abituato al garbage collector...


-- AlessandroPiva - 29 May 2006

chiarimento sui test

scusi prof, non ho ben capito che controlli dobbiamo fare nella Edit su FieldValue... perche'ad es nel test 40105 e'errato il campo cognome???? e nel 40106 il problema e' che ci deve essere per forza un valore valido???

-- MarcoLaVecchia - 30 May 2006

Re: chiarimento sui test

40105: il campo COGNOME non esiste nel DBF. 40106: non è ammesso che value sia NULL se dovrà contenere valori.

-- GianniCampanile - 30 May 2006

Errori di compilazione anche con string.h e memory.h inserite

Professore, la compilazione del testM4.c continua a darmi warning nonostante io abbia inserito le librerie string.h e memory.h... Non riesco a capire il perchè... Gli errori sono gli stessi.

-- AndreaCosentino - 30 May 2006

Re: Errori di compilazione anche con string.h e memory.h inserite

Mi faccia un cut&paste dei warning.

-- GianniCampanile - 30 May 2006

warning TestM4.c

Basta che applichi questa patch e non da piu warning ...

--- TestM4.c.old        2006-05-30 01:54:46.000000000---+0200
---+++ TestM4.c    2006-05-30 01:53:58.000000000 +0200
@@ -10,6---+10,7 @@
 #include "LPC_Include.h"
 #include <stdio.h>
 #include <stdlib.h>
---+#include <string.h>

 #define NUMFIELDS 10
 #define NUMVALUES 5

-- GabrieleGristina - 30 May 2006

RE:RE: Errori di compilazione anche con string.h e memory.h inserite

Questo sono gli errori ora provo anche la patch suggerita da gabriele. Grazie.
gcc -c -g -I include -I ../include src/LPC_EditRec.c -o obj/LPC_EditRec.o
gcc -c -g -I include -I ../include src/LPC_ReadRec.c -o obj/LPC_ReadRec.o
gcc -c -g -I include -I ../include src/LPC_LocateRec.c -o obj/LPC_LocateRec.o
gcc -c -g -I include -I ../include src/LPC_Common.c -o obj/LPC_Common.o
ar rc lib/Modulo4.a obj/LPC_EditRec.o obj/LPC_ReadRec.o obj/LPC_LocateRec.o obj/LPC_Common.o
gcc -c -g -I include -I ../include test/TestM4.c -o test/TestM4.o
test/TestM4.c: In function ‘TestEdit’:
test/TestM4.c:201: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestRead’:
test/TestM4.c:339: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestLocate’:
test/TestM4.c:543: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestMisto’:
test/TestM4.c:827: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘Result’:
test/TestM4.c:970: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c: In function ‘ConfrontaFiles’:
test/TestM4.c:1030: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c: In function ‘Startup’:
test/TestM4.c:1075: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c:1114: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c:1122: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c:1126: warning: incompatible implicit declaration of built-in function ‘strlen’
gcc test/TestM4.o ../obj/LPC_Err.o lib/Modulo4.a ../Modulo3/lib/Modulo3.a ../Modulo2/lib/Modulo2.a ../Modulo1/lib/Modulo1.a -o test/TestM4
-- AndreaCosentino - 30 May 2006

RE: RE:RE: Errori di compilazione anche con string.h e memory.h inserite

Tutto risolto. Ho provato a riscrivere di nuovo le inclusioni ed è andato tutto a posto. Grazie comunque.

-- AndreaCosentino - 30 May 2006

Cosa fa la edit?

Professore io non ho capito esattamente cosa fa la edit. Nelle specifiche c'è scritto che il campo value della struttura fieldvalue deve essere opportunamente allocato.. Questo significa che noi preleviamo delle informazioni sui campi del DBF ed a seconda del tipo di informazione la mettiamo nel campo value, facendo un cast del puntatore? Ma poi con queste informazioni che ci dobbiamo fare? Le specifiche, personalmente non mi sembrano molto chiare, magari sono io. Grazie

-- AndreaCosentino - 31 May 2006

Re: Cosa fa la edit?

Il problema credo nasca dal fatto che le specifiche di interfaccia non sono rivolte a voi, ma sono il comportamento della funzione rispetto ad un qualunque utilizzatore. Questo vuol dire che il chiamante della Edit deve allocare il campo value opportunamente, ma di fatto voi, utilizzando il programma di Test, lo trovate già allocato correttamente. Nel caso della Edit mi sembra chiaro che dovete scrivere ogni valore passato nella posizione opportuna nel record corrente del DBF.

-- GianniCampanile - 31 May 2006

re:re:cosa fa la edit?

Infatti mi sembrava strano che ci fosse passata una struttura con delle parti da allocare... Nel dubbio ho preferito chiedere. La ringrazio molto. Ora ho le idee più chiare su cosa fare..

-- AndreaCosentino - 31 May 2006

EditRecord e ReadRecord

Professore sulle specifiche viene scritto che per la EditRecord non possiamo usare la ReadRecord, e non possiamo richiamare una funzione che implementi la logica della ReadRecord. Significa che la Edit non puo usare lo stesso metodo di lettura della Read? O solamente che non possiamo richiamare la Read?

-- BaggiAlessandro - 31 May 2006

Re: EditRecord e ReadRecord

Che non potete richiamare la Read. Ovviamente potete richiamamre le stesse funzioni di spostamento e lettura della libreria C.

-- GianniCampanile - 31 May 2006

Ricerca del campo

Come faccio a capire dove si trova precisamente un certo campo nel record?

-- EmanueleGallo - 01 Jun 2006

Re: Ricerca del campo

C'è scritto nelle specifiche che "La sequenza dei valori in ogni record sul file rispetta la sequenza dei campi definiti nell'header". Cioè significa che se nell'header incontro per primo, ad esempio, un campo di tipo LOGICAL, allora in ogni record il primo campo è di tipo LOGICAL? Si può usare la struttura FieldData per avere informazioni sui campi (come la lunghezza)?

-- EmanueleGallo - 01 Jun 2006

Re: chiarimento sulle note

Perchè avete messo nelle note di includere anche memory.h quando questo include non fa altro che controllare se è definito string.h, altrimenti lo definisce !?! Se non fosse perchè usa ifdef sarebbe un errore (secondo le vostre specifiche), e cmq resta il fatto chè è inutile smile

-- GabrieleGristina - 01 Jun 2006

re:re: ricerca campo

Penso che ti serva a prescindere la struttura FieldData.. Perchè per vedere se i nomi di fieldValue sono validi, devi confrontarli con tutti quelli di FieldData.. Per cui credo che si debba usare GetFieldInfo passandogli una struttura FieldData allocata appositamente..

-- AndreaCosentino - 01 Jun 2006

Re: Re: Re: Ricerca campo
Ok ho capito grazie. E invece per quanto riguarda la ricerca del campo? Come faccio a capire dove si trova il campo di nome FieldValue->Name?

-- EmanueleGallo - 01 Jun 2006

Re: Re: Re: Re: Ricerca Campo

Sto cercando di capirlo anch'io!

-- AndreaCosentino - 01 Jun 2006

Re: Soliti Warning

Professore, anche io ho avuto problemi con i warning sopra citati dopo aver fatto solamente i prototipi dcelle funzioni e tentato la compilazione, li ho risolti, però solamente dopo aver incluso string.h e memory.h NEL VOSTRO FILE DI TEST perchè altrimenti non c'era modo di farli sparire ora la domanda è: Dato che testerete il programma sul vostro file di test, aggiungerete queste inclusioni (Altrimenti mi ritrovo con una "sbragata" di warning)
gcc -c -g -I include -I ../include src/LPC_EditRec.c -o obj/LPC_EditRec.o
gcc -c -g -I include -I ../include src/LPC_ReadRec.c -o obj/LPC_ReadRec.o
gcc -c -g -I include -I ../include src/LPC_LocateRec.c -o obj/LPC_LocateRec.o
gcc -c -g -I include -I ../include src/LPC_Common.c -o obj/LPC_Common.o
ar rc lib/Modulo4.a obj/LPC_EditRec.o obj/LPC_ReadRec.o obj/LPC_LocateRec.o obj/LPC_Common.o
gcc -c -g -I include -I ../include test/TestM4.c -o test/TestM4.o
test/TestM4.c: In function ‘TestEdit’:
test/TestM4.c:201: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestRead’:
test/TestM4.c:339: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestLocate’:
test/TestM4.c:543: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestMisto’:
test/TestM4.c:827: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘Result’:
test/TestM4.c:970: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c: In function ‘ConfrontaFiles’:
test/TestM4.c:1030: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c: In function ‘Startup’:
test/TestM4.c:1075: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c:1114: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c:1122: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c:1126: warning: incompatible implicit declaration of built-in function ‘strlen’
gcc test/TestM4.o ../obj/LPC_Err.o lib/Modulo4.a ../Modulo3/lib/Modulo3.a ../Modulo2/lib/Modulo2.a ../Modulo1/lib/Modulo1.a -o test
-- GiuseppeDiFederico - 02 Jun 2006

TestM4.c & Valgrind

dopo aver eseguito : # valgrind --leak-check=full ./TestM4

ottengo : 355 bytes in 10 blocks are definitely lost in loss record 1 of 4 at 0x1B8FFB88: calloc (in /usr/lib/valgrind/vgpreload_memcheck.so) by 0x804C258: Startup (TestM4.c:1093) by 0x8048BC9: main (TestM4.c:112)

355 bytes in 10 blocks are definitely lost in loss record 2 of 4 at 0x1B8FFB88: calloc (in /usr/lib/valgrind/vgpreload_memcheck.so) by 0x804C1D8: Startup (TestM4.c:1086) by 0x8048BC9: main (TestM4.c:112)

355 bytes in 10 blocks are definitely lost in loss record 3 of 4 at 0x1B8FFB88: calloc (in /usr/lib/valgrind/vgpreload_memcheck.so) by 0x804C158: Startup (TestM4.c:1079) by 0x8048BC9: main (TestM4.c:112)

359 bytes in 10 blocks are definitely lost in loss record 4 of 4 at 0x1B8FFB88: calloc (in /usr/lib/valgrind/vgpreload_memcheck.so) by 0x804C2EA: Startup (TestM4.c:1099) by 0x8048BC9: main (TestM4.c:112)

linea 112 di TestM4.c


// Pulizia iniziale e preparazione dell'handle e allocazione handle = Startup(handle, reset);

Forse c'e' un errore in TestM4.c


-- WalterValentini - 02 Jun 2006

libreria del modulo 3

gentile prof, vorrei sapere quando sarà messa online la libreria del modulo 3. Mi sembrava inutile iniziare a scrivere codice adesso se non abbiamo le librerie.

-- MarcoLaVecchia - 02 Jun 2006

TestM4.c: test numero 40108 dubbio su ConfrontaFiles

Professore, mi è sorto un dubbio guardando il la funziona ConfrontaFiles da voi implementata nel test. Questa funzione confronta due file e ritorna -1 in caso siano differenti o 0 in caso siano uguali. A priori non so quale file sto modificando, però ho un dubbio. L'istruzione alla riga 322:
if(ConfrontaFiles("Prova4.dbf", "ProvaTest1.dbf"));
         break;

credo prenda in input il file da noi modificato ed il file di partenza . Il nostro file sarà necessariamente diverso da quello di partenza, e la funzione tornerà sempre -1. Quindi, sempre supponendo che il file con cui confronto il file modificato sia quello di partenza, l'istruzione dovrebbe essere:

if(!ConfrontaFiles("Prova4.dbf", "ProvaTest1.dbf"));
         break;

Tanto per sapere perchè non riesco a passare proprio l'ultimo test del ConfrontaFiles: mi sono fatto stampare il valore di ConfrontaFiles relativo al test, ed è di -1 e viene proprio dalla memcmp dei file presi in input. La ringrazio e scusi la lunghezza, spero di essere stato chiaro.

// Verifica funzionalita' (2)
   test[numtest].testid = 40108;
   test[numtest].weight = 10;
   strcpy(test[numtest].desc, "EDIT: Funzionalita'(2)");
   printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
   for(;;)
   {
      ret = GotoRecord(handle, ABSOLUTE, 50);
      if (ret != 50)
         break;
         

      time(&Start);
      // Modifico i primi NUMVALUES
      ret =  EditRecord(handle, NUMVALUES, &FieldValue[0]);
      printf("Ritorno della EditRecord: [%d]\n", ret);
      if (ret != LPC_OK)
         break;
      time(&Stop);
   

      ret = GetDBFInfo(handle, &DBFInfo);
      if (ret != LPC_OK)
         break;
         
      if ((DBFInfo.CurrentRec != 51) || (DBFInfo.LastUpdate > Stop) || (DBFInfo.LastUpdate < Start))
         break;
         

      if(ConfrontaFiles("Prova4.dbf", "ProvaTest1.dbf"));
         break;
         

      test[numtest].passed = 1;
      break;
   }
   numtest---++;
-- AndreaCosentino - 03 Jun 2006

Re: (senza titolo)TestM4?.c: test numero 40108 dubbio su ConfrontaFiles

In queste righe di codice avviene il confronto tra due file, il file Prova4.dbf che viene copiato con la startup() da ProvaTest4.dbf, mentre il ProvaTest1.dbf dovrebbe corrispondere al Prova4.dbf editato. La funzione fa il suo lavoro ed è corretta, magari sbagli qualcosa ...prova ad analizzare il file dopo l'edit con od o con vi,oppure esamina il codice con un debugger.. magari trovi il problema. smile if(ConfrontaFiles("Prova4.dbf", "ProvaTest1.dbf")); break;

-- BaggiAlessandro - 04 Jun 2006

Re: Re: TestM4?.c: test numero 40108 dubbio su ConfrontaFiles?

Controllando meglio il codice mi ero accorto di aver preso una toppa clamorosa... Cmq ora vedo dove sbaglio, perchè il numero di caratteri che scrivo su file sono giusti, evidentemente sbaglio qualche conversione oppure è un problema di casting di value

-- AndreaCosentino - 04 Jun 2006

Re: TestM4.c & Valgrind

E' dovuto alla doppia inizializzazione quando viene richiamata l'opzione 5. Viene infatti richiamata nuovamente la Startup per reinizializzare tutto, e non viene verificato che non sia stata già fatta un'inizializzazione. Di fatto viee sprecata un po' di memoria, ma in questo modo c'è anche la sicurezza che c'è una nuova inizializzazione e che i buffer sono tutti a NULL. Non dovete prendere il programma di Test come un fulgido esempio di buona programmazione, non è stato scritto per quello.

-- GianniCampanile - 05 Jun 2006

Confronta Files: Test 40108

Ho dei problemi con l'ultimo test della Edit. Il 40108 confronta appunto due files, il prova4 modificato da noi ed il provatest1 che rappresenta il dbf giusto dopo le modifiche. Non riesco a capire perchè nonostante utilizzi la memcpy per tutta la lunghezza dei miei campi, i NULL che dovrebbero essere scritti sono ignorati in alcuni casi.

ci combatto da un po' e non riesco a venirne a capo. Se scrivo per tutta la lunghezza del campo in teoria dovrei scrivere anche i NULL. Quindi l'unica domanda che mi viene da fare è i NULL finali sono compresi nel FieldLen che ci viene restituito dalla GetFieldInfo? Oppure dobbiamo scriverli singolarmente su file? Grazie.

Record Correnti toccati dal test 40108
File ProvaTest1 giusto

0043140  \0  \0  \0  \0  \0  \0  \0  \0   @   @ 200  \0  \0  \0  \0  \0
0043160  \0  \0  \0 003  \t  \0   ? 353 327  \n   =   p 243 327  \0 001
0043200  \0   F  \0   H   E   L   L   Z   A   P   O   P   P   I   N   G
0043220  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0043240  \0  \0   V   Q  \0   0   2   4   3   6   5  \0  \0  \0  \0  \0
0043260   V   i   a       A   l   v   i   s   e       P   e   r   s   i
0043300   c   h   e   t   t   i       7   7  \a  \a  \a  \0  \0  \0   G
0043320   a   b   r   i   e   l   e   G   r   i   s   t   i   n   a  \0
0043340   h   i  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0043360  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*

File Prova4 mio sbagliato
0043140  \0  \0  \0  \0  \0  \0  \0  \0   @   @ 200  \0  \0  \0  \0  \0
0043160  \0 003  \t   ? 353 327  \n   =   p 243 327 001   F   H   E   L
0043200   L   Z   A   P   O   P   P   I   N   G  \0  \0  \0  \0  \0  \0
0043220  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0043240  \0  \0   V   Q  \0   0   2   V   i   a       A   l   v   i   s
0043260   e       P   e   r   s   i   c   h   e   t   t   i       7   7
0043300  \a  \a  \a  \0  \0   3  \0   _   1  \0   _   5   8   2  \0   G
0043320   a   b   r   i   e   l   e   G   r   i   s   t   i   n   a  \0
0043340   h   i  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0043360  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*




-- AndreaCosentino - 05 Jun 2006

Test 40305 e 40306

Salve, vorrei sapere perchè il test 40305 si aspetta LPC_BAD_FIELD mentre il test 40306 si aspetta LPC_BAD_ARG quando la specificazione dell'errore è la stessa, ovvero FieldValue errato. A mio parere risulta abbastanza scomodo per la ricerca degli errori...Grazie

-- PaoloParlapiano - 05 Jun 2006

Re: Soliti Warning

Professore scusi, ma nn ha risposto alla domanda che le avevo fatto venerdi 2, come facciamo con questi warning? Includerete string.h e memory.h nel vostro file di test ?

-- GiuseppeDiFederico - 05 Jun 2006

Re: Soliti Warning

E' ovvio che i warning che non dipendono dal vostro codice non verranno considerati errori.

-- GianniCampanile - 06 Jun 2006

Re: Test 40305 e 40306

In un caso è errato il nome del campo, nell'altro la variabile passata. Le specifiche della funzione prevedono due errori diversi.

-- GianniCampanile - 06 Jun 2006

Qualche domanda

Salve, vorrei porre le seguenti domande: 1 - Anche per questo modulo la sequenzialità dei test è obbligatoria? E' possibile iniziare a sviluppare la LocateRec ed ottenere una valutazione corretta con il relativo test?

2 - Dopo alcuni problemi nello sviluppo della LocateRec ho fatto una prova di lettura di tutto il file Prova4.dbf come char mettendolo in un vettore abbastanza grande, ma la lettura si blocca al byte 34464, e poi con l'avanzare dei tests cambia ancora di valore ma non arriva mai alla fine del file. Facendo un'altra prova con un sorgente esterno la lettura avviene correttamente, ne deduco quindi che i tests bloccano in qualche modo l'avanzamento della fread, ma qual'è il motivo? Dal byte 34464 dovrebbero partire i controlli nel caso CURRENT, e a causa di questo problema non riesco ad andare avanti.

Grazie


-- PaoloParlapiano - 06 Jun 2006

Re: Qualche domanda

1. E' meglio farli sequenzialmente. Non so se partendo con la Locate funzionano. 2. Non ho capito il problema, ma non credo sia la strada per andare avanti. Eviti di leggere tutto il file, in ogni caso non è consentito, e legga solo un record alla volta. Sviluppare prima la Read serve anche a capire meglio come sviluppare la Locate

-- GianniCampanile - 06 Jun 2006

short FieldType //!< Tipo di campo NBO O HOST

SALVE Nel primo modulo si e detto che anche se non e detto esplicitamente (specifiche di interface) queste campo "FieldType" nel file .dbf va scritto in NBO , ma in questo Modulo(4) vedo che in un file non e in NBO. Non so se mi sbaglio.

-- AlbanKomici - 06 Jun 2006

Re: Stranezza nelle specifiche

Professore, scusi ma nelle specifiche, nella definizione di struttura FIELD_VALUE_t c'è un solo campo: nome[DBF_NAME_LENGTH], nn ci dovrebbe essere anche void * value?!? Mi sono impiccato questi giorni per capire quale era il valore da sostituire al nomecampo, del record corrente, poi mi sono ricordato che a lezione ci aveva parlato di un void * value, ma nelle specifiche html non viene citato, nel caso mi stia sbagliando, dove lo vado a pescare questo benedetto value?

-- GiuseppeDiFederico - 07 Jun 2006

Re: short FieldType //!< Tipo di campo NBO O HOST

Mi può dire in che file e quale campo ?

-- GianniCampanile - 07 Jun 2006

Re: Re: Stranezza nelle specifiche
ModuloQuattro

-- GianniCampanile - 07 Jun 2006

Re: Stranezza nelle specifiche (continuo a nn capire)

Pezzo di testo estratto dalle specifiche interne:

La struttura di lettura
Il campo value della struttura FIELD_VALUE_t è un void *, quindi può essere utilizzato per leggere qualunque tipo di dato.

Questo invece è: Modules/specifiche comuni a tutti i moduli/ strutture/ FIELD_VALUE_t :

Data Fields
char Name [FIELD_NAME_LENGTH---+1]
Nome del campo.
STOP

E' evidente che la struttura FIELD_VALUE_t è composta dal solo campo Name, ma le specifiche citate sopra non citavano un campo void * value della struttura FIELD_VALUE_t dove è?!? io ne vedo solo uno!!!
Per favore professore, se ho capito qualcosa male non mi metta un altra volta il link al modulo4 che l'ho letto 10 mila volte, ma mi spieghi cosa non ho capito !!


-- GiuseppeDiFederico - 07 Jun 2006

Re: Re: Stranezza nelle specifiche (continuo a nn capire)
Nella pagina del ModuloQuattro c'è da tempo il nuovo file LPC_Include.h che sostituisce il precedente.

-- GianniCampanile - 07 Jun 2006

Differenza tra file

Professore siccome i file sono molto grandi e con il comando od -c non si riesce a vederlo tutto, esiste un comando per vedere dove i due file sono diversi ?

-- SimoneDiCola - 07 Jun 2006

Edit Record: controllo del nome e scrittura sul file

Professore volevo sapere se dobbiamo per forza controllare prima che tutti i nomi dei campi contenuti nel vettore di FieldValue siano corretti oppure possiamo scrivere sul file fino a quando incontriamo un nome non corretto (quest'ultima cosa mi permetterebbe di evitare un controllo ridondante sui nomi)

-- ValerioMauro - 07 Jun 2006

Re: Re: Re: Stranezza nelle specifiche
Ho capito, quindi la struttura che c'è nelle specifiche è ERRATA infatti nel modulo 4 se clicco su FIELD_VALUE_t mi fa vedere la vecchia struttura con un solo campo che non va---+ bene, e che mi ha fatto perdere tanto tempo (nn riuscivo a capire dove era questo value). Ora è chiaro grazie.

-- GiuseppeDiFederico - 07 Jun 2006

Re: Re: short FieldType? //!< Tipo di campo NBO O HOST
Nel file Prova4.dbf dell Modulo4 vedo che il campo FieldType dei definizini non é in NBO
//! Definizione di un campo del database
typedef struct {
   
   char   Name[FIELD_NAME_LENGTH---+1];   //!< Nome del campo
   short      FieldType;   //!< Tipo di campo
   short      FieldLen;   //!< Lunghezza del campo. Se numerico, lunghezza della parte intera.
   short      FieldDecs;   //!< Decimali del campo (se ve ne sono, altrimenti 0)
   
} FIELD_DATA_t;

-- AlbanKomici - 07 Jun 2006

Pagina di consegna

Salve, quando prevedete di mettere la pagina di consegna per il modulo 4? Grazie

-- PaoloParlapiano - 08 Jun 2006

Re: Re: Re: short FieldType?? //!< Tipo di campo NBO O HOST
A me sembra in NBO.

-- GianniCampanile - 08 Jun 2006

Test sulla EditRecord e Test Misto ripetuti danno errore?

Professore io ho il 100 su 100 con entrambe ma solo la prima volta che le eseguo,nel momento in cui provo ad eseguire il test misto ad esempio la prima locate record che agisce su una posizione CURRENT mi trova i valori che cerco nel record numero 20 del file,nella EditRecord il test finale fallisce ma questo già é più ovvio perchè ho appena modificato tutto;volevo solo sapere se é normale che vada così oppure no.

-- ValerioMauro - 08 Jun 2006

Re: Test sulla EditRecord e Test Misto ripetuti danno errore?

In generale non è garantito che l'esecuzione ripetuta dei test dia risultati corretti, perché i files vengono modificati. Visto che è parecchio in anticipo però, cerchi di capire lei stesso se l'errore è proprio dovuto a questo.

-- GianniCampanile - 08 Jun 2006

FFLUSH: va messa o meno?

Professore un'altra cosa,la fflush va utilizzata o no in questo modulo?

-- ValerioMauro - 08 Jun 2006

(senza titolo)

EditRecord (ReadRecord) && NBO

Salve Prof. Vedo che i dati (campi )da modificare "Field[i].value" devvono essere neccesariamente convertiti in NBO prima di scriverli ne CurrentRec .Pero nelle Specifiche si dice solo modificare il CurrentRec con i dati presente nell vettore FieldValue.

Riguarda al FieldType nei definizone dei campi vedo che non sono in NBO


-- AlbanKomici - 08 Jun 2006

EditRecord? (ReadRecord?) && NBO

Salve Prof. Vedo che i dati (campi )da modificare "Field[i].value" devvono essere neccesariamente convertiti in NBO prima di scriverli ne CurrentRec? .Pero nelle Specifiche si dice solo modificare il CurrentRec? con i dati presente nell vettore FieldValue?.

Riguarda al FieldType? nei definizone dei campi vedo che non sono in NBO


-- AlbanKomici - 08 Jun 2006

Pagina consegna modulo 4.

Qaundo verrà messa online tale pagina ?

-- SimoneDiCola - 09 Jun 2006

Re: EditRecord (ReadRecord) && NBO

E' vero che non è detto esplicitamente, ma i campi numerici devono essere TUTTI convertiti in NBO. Per il FieldType le ho già risposto: a me sembra tutto in NBO.

-- GianniCampanile - 09 Jun 2006

Verbalizzazione

Mi scuso per OFF TOPIC ma non sapero dove postare. E' possibile sapere la data della discussione e veralizzazione dell'esame? grazie

-- AlessandroCasciaro - 10 Jun 2006

Re: Verbalizzazione

Ho messo alcune indicazioni sulla pagina degli esami.

-- GianniCampanile - 12 Jun 2006

Conversione long

Salve professore potrebbe spiegarci meglio come si può capire se una macchina è big endian o little endian e come dobbiamo comportarci in entrambi i casi? Grazie mille.

-- AlessioDezi - 15 Jun 2006

big Endian= NBO

Salve professore. giustamente lei mi ha detto che chiedevo un po troppo, però adesso vorrei solamente sapere se Big Endian equivale al Network byte order come risulterebbe da alcune ricerche da me effettuate. Grazie.

-- AlessioDezi - 16 Jun 2006

Re: big Endian= NBO

Si

-- GianniCampanile - 16 Jun 2006

Test 40103

Salve professore, nelle specifiche c'è scritto che NumValues deve essere > 0 e <= del Numero di record, però nel test 40103 si da come valore 100 e facendo una getDBFInfo il numero di record che mi ritorna è 100, quindi non dovrebbe dare errore di un NumValues errato. Grazie.

-- AlessioDezi - 16 Jun 2006

Tipo di ritorno della LocateRec()

ma considerando che i campi NumRecs e CurrentRec sono long int non dovrebbe esserlo anche il ritorno della locate ovvero il nuovo record corrente?

-- FerdinandoAlessi - 19 Jun 2006

Re: Tipo di ritorno della LocateRec()

Si, è un errore. Su Linux32 non dovrebbe generare alcun warning perché sizeof(int)==sizeof(long).

-- GianniCampanile - 19 Jun 2006

Alcune domande sulla ReadRecord()

Ho alcuni dubbi su questa funzione. A seconda del valore di FieldValue->Name bisogna leggere nel file il valore del campo corrispondente? Il valore del campo che dovrò memorizzare nella struttura come faccio a capire qual'è?

-- EmanueleGallo - 19 Jun 2006

Re: Alcune domande sulla ReadRecord()

Quello che non ho capito in particolare è come faccio per trovare la posizione del campo che devo andare a leggere. Su cosa mi baso?

-- EmanueleGallo - 20 Jun 2006

Probabile errore di eccessiva allocazione di memoria?

Un' allocazione di questo tipo può essere considerato un errore per eccessiva allocazione di memoria visto che il numero dei campi può arivare al valore massimo di 255 oppure va bene?
data=(FIELD_DATA_t*)calloc(sizeof(FIELD_DATA_t),numero_campi_del_database);
-- PaoloGrasso - 20 Jun 2006

Re: Probabile errore di eccessiva allocazione di memoria?

Se si vogliono leggere tutti i campi deve essere fatta per forza, se non c'è memoria verrà restituito errore.

-- GianniCampanile - 21 Jun 2006

Edit Rec

gentile professore, non so se ho capito bene cosa va fatto nella EditRec: dopo i controlli preliminari sulla correttezza dei dati passati , io vedo quali campi del database corrispondono a quelli nella struttura FieldValue e quelli uguali li modifico nel database... e' giusto??? o sto dimenticando qualcosa???

-- MarcoLaVecchia - 21 Jun 2006

test 40105

ah, dimenticavo, come mai il test 40105 considera errato il campo COGNOME? se ho capito bene e' perche' non e' contenuto nel database, ma ho fatto un po di stampa e mi sembra non sia l'unico: sono presenti 10 campi e tutti con valori strani e l'unico campo che e' in comune con fieldvalue e' Comune. Aspetto suggerimenti

-- MarcoLaVecchia - 21 Jun 2006

Re: Edit Rec & test 40105

Solo questo. Se le sembra poco possiamo aggiungere qualche conversione qui e là.... Per quanto riguarda il test, mi sembra che i campi corrispondano ai campi del DB.

-- GianniCampanile - 21 Jun 2006

re: edit rec & test 40105

ok, grazie ho risolto per l'errore. La prima domanda ok, volevo sapere solo in linea di massima

-- MarcoLaVecchia - 21 Jun 2006

modalità esame

Scusi professore, vorrei sapere se all'esame è necessario che portiamo i moduli che abbiamo gia consegnato, oppure la discussione avverrà direttamente sulle copie da noi inviate?? Le chiedo questo perchè per un problema al pc ho smarrito i moduli inviati sinora...

-- MarcoLaVecchia - 21 Jun 2006

Possibile errore nel test 40313

Quando devo cercare le informazioni sul record 20 (il record da ritornare quindi), e faccio la comparazione dei campi del record 20 con i valori dei FieldValue, quando devo controllare il campo "sesso" io dal file leggo "M" che dovrebbe essere corretto, mentre il valore del campo passatomi nel vettore FieldValue vale "H", sbaglio qualcosa io o e un errore del test? Ho controllato anche gli altri due campi del vettore e quelli che leggo io,sono uguali, quindi sono abbastanza sicuro che e un errore nel test.

-- PaoloGrasso - 21 Jun 2006

Re: modalità esame

Sulle copie inviate, almeno per quanto riguarda il mio canale non avete bisogno di portare voi il codice.

-- GianniCampanile - 22 Jun 2006

Re: Possibile errore nel test 40313

Il test 40313 usa il vettore Record20 e non FieldValue. Credo che lei vada a leggere la prima lettera del campo Comune di FieldValue.


-- GianniCampanile - 22 Jun 2006

errore test 40103 rispetto alle spacifiche

professore ho notato che il test 40103 controll che ritori errore se ho NumValues==NumRecs, però secondo la documentazione NumValuesdeve essere <NumRecs, di conseguenza questo test passa correttamente se lo provo a fare seguendo le indicazioni del html. che cosa devo fare? seguo le specifiche e lasco il controllo per NumValues<NumRecs o lo modifico(anch e mi sembra un inosservanza delle specifiche) solo per superare il test??

-- StefanoLAVAGNO - 22 Jun 2006

errore test 40103 rispetto alle spacifiche2

NumValues <= a NumRecs nelle specifiche, ho sbagliato a scrivere...

-- StefanoLAVAGNO - 22 Jun 2006

Re: errore test 40103 rispetto alle spacifiche

Potrebbe essere piu' chiaro ? Non credo sia quello il numero del test a cui si riferisce

-- GianniCampanile - 22 Jun 2006

(senza titolo)

nella funzione Edit nell'ultimo test della funzionalita', ho il seguente errore che non mi fa passare il test. Cosa devo fare?
Test:[40108] Peso:[10] - [EDIT: Funzionalita'(2)]
Ritorno della EditRecord: [0]
Errore [-7] in [GetDBFInfo]-->[Errore di sistema [2] in spostamento su file [No such file or directory]]

-- OnelioCancellieri - 23 Jun 2006

comportamento della edit

gentile prof, non ho capito bene quale deve essere il comportamento della Edit in merito ad lcuni casi: se la Edit modifica l'ultimo record del database, alla fine deve ritornare LPC_ERR_EOF??? insomma quando il file pointer si trova a fine file, va effettuato lo spostamento al record successivo???

-- MarcoLaVecchia - 24 Jun 2006

Re: comportamento della edit

non penso, perchè sarà una chiamata successiva alla Edit a generare LPC_ERR_EOF.e comunque il file pointer va lasciato alla fine del record modificato.

-- StefanoGuglielmi - 25 Jun 2006

strano errore

facendo anche le altre funzioni oltre alla Edit ho sempre lo stesso errore, potrei sapere a cosa si riferisce? Grazie.
Test:[40108] Peso:[10] - [EDIT: Funzionalita'(2)]
Ritorno della EditRecord: [0]
Errore [-7] in [GetDBFInfo]-->[Errore di sistema [2] in spostamento su file [No such file or directory]]
-- OnelioCancellieri - 25 Jun 2006

Re: strano errore

Usi l'ultima versione della libreria del modulo2, c'è un controllo migliore dell'errore.

-- GianniCampanile - 26 Jun 2006

Re: Re: errore test 40103 rispetto alle spacifiche
nella riga 228 sel testm4 c'è passa alla funzione:

ret = EditRecord(handle, 100, &FieldValue[0]);

ed il numero dei record sono appunto 100, qunidi il test controlla che numvalues sia < di numfields poichè si aspetta 1 errore,se invece aspettasse <= come è scritto nella documentazione html dovrebbe passare il test con PLC_OK, come bisogna comportarsi di conseguenza?


-- StefanoLAVAGNO - 26 Jun 2006

Re: Re: Re: errore test 40103 rispetto alle spacifiche
Legga bene le specifiche.

-- GianniCampanile - 26 Jun 2006

ConfrontaValues

Salve professore, potrebbe spiegarmi meglio la funzione di test ConfrontaValues? FieldValue dovrebbe essere quello creato da noi con la ReadRecord, e FieldValueRef e FieldData cosa contengono?perche i nomi dei campi nelle diverse strutture devono essere diversi? Grazie.

-- AlessioDezi - 29 Jun 2006

GetFieldInfo

Alla GetFieldInfo se si passa un campo non valido dovrebbe tornare LPC_BAD_FIELD invece ho notato ke torna LPC_BAD_ARG. vorrei sapere se sono io che sbaglio qualkosa oppure se c'è un errore nella vostra funzione

-- MarcoLaVecchia - 01 Jul 2006

Re: GetFieldInfo

Anche io ho riscontrato la stessa cosa, perchè se il campo "Name" non è valido dovrebbe tornare LPC_BAD_FIELD e invece torna LPC_BAD_ARG (deve tornare LPC_BAD_ARG solo se l'handle non valido, NumFields < 0 o puntatore FieldData NULL).

-- LucaTartaglia - 01 Jul 2006

ConfrontaFiles

Professore, sono giorni e giorni che sono bloccato su questo ConfrontaFiles della Edit, e non riesco proprio a venirne a capo. Ho persino modificato il vostro file di test per vedere precisamente quali sono i byte che "sfarloccano" e praticamente sono tutti quelli modificati. Eppure ho seguito le specifiche e fatto tutto "correttamente": per esempio:

case DATE:
variabile = (long)(FieldData->value);
variabile = htonl(variabile)
fwrite......
break;
Il byte sul quale scrivo è giusto, ed ogni posizionamento è stato ricontrollato più volte, ci deve essere qualche problema che mi sfugge

P.S Che significa

 i valori da non modificare vanno preservati quindi è opportuno leggere prima il record?
Non possiamo semplicemente posizionarci sul punto giusto e fare un fwrite di sizeof(tipo)?
Grazie confido in qualche "suggerimento illuminante"


-- GiuseppeDiFederico - 03 Jul 2006

FieldValue(2)

Ma perchè nel test FieldValue(2), si fanno alcune modifiche sul primo record e poi, nel test funzionalità(2), quando fa il confronto dei file nel file ProvaTest quel record non è mai stato toccato? Questo ovviamente mi fa fallire il test perchè i miei valori sono modificati e non corrispondono!!!

-- GiuseppeDiFederico - 03 Jul 2006

Errore nella libreria del modulo 2

Usando la GetFieldInfo mi sono accorto che forse c'è un errore di congruenza con le specifiche, cioè quando un campo non è valido dovrebbe ritornare LPC_BAD_FIELD che si riferisce al campo non valido mentre torna LPC_BAD_ARG che si riferisce a handle non valido, NumFields < 0 o puntatore FieldData NULL.

-- AlessandroCasciaro - 06 Jul 2006

informazioni sulle strutture utilizzate nel LPC_Include

Nel file LPC_INCLUDE.h sono definiti dei campi di struct tra cui In FIELD_DATA_t: short FieldLen; //!< Lunghezza del campo. Se numerico, lunghezza della parte intera. In DBF_INFO_t: int NumFields; //!< Numero dei campi del database

Volevo sapere se FieldLen e' la lunghezza del campo compreso il nome del campo o solamente del valore del campo e se NumFields è il numero dei campi totali nel dbf o il numero di campi in uno dei record del dbf. Volevo anche chiedere se nella EditRecord i valori in FieldValue corrispondono al tipo del campo o devono essere controllati prima di essere scritti sul file Grazie


-- ColocciDaniele - 06 Jul 2006

Consegna

Per questioni di comodità è possibile consegnare l'intera cartella Modulo4 al cui interno sono contenuti tutti i file richiesti?

-- MassimilianoNatale - 06 Jul 2006

Gestione della funzione errore in chiamate ad albero

Salve, vorrei porre due domande: ho sviluppato il modulo 4 appoggiandomi su funzioni ausilarie nel LPC_Common.c che in alcuni casi si chiamano tra loro. Ad esempio per ogni tipo di campo ne ho una che legge il suo contenuto su file per restituirlo poi al chiamante. Queste vengono invocate da altre funzioni nel LPC_Common.c che servono per comparare, memorizzare ecc. Ovviamente queste ultime sono chiamate dalle funzioni principali del modulo, ma questa gerarchia non viene sempre rispettata e le sequenze delle chiamate variano a seconda delle esigenze: ad esempio se ho bisogno di leggere un campo chiamo direttamente la funzione che fa l'I\O su file, se ho bisogno di leggerlo e compararlo con un valore che possiedo, chiamo la funzione che compara i valori che si occuperà autonomamente di chiamare la funzione di lettura su file, e tutto varia in oltre in base al tipo di campo su cui lavorare. La mia domanda è: se la funzione al ramo più basso di queste chiamate intercetta un errore (dovuto ad esempio a mancata lettura o scrittura su file), la segnalazione dell'errore come deve avvenire fino al raggiungimento della radice delle chiamate? In particolare vorrei sapere se è giusto che tutte stampino l'errore. Vorrei in oltre precisare che sono errori generati dalla mancata lettura o scrittura su file, cioè come si suol dire "situazioni patologiche", infatti facendo il test in condizioni normali questi non vengono mai stampati. Arrivando al punto, se tutte (mai più di 3 per volta compresa la funzione Read, Edit, o Locate) stampano l'errore, il controllo delle specifiche viene passato?

La seconda domanda che vorrei porre è questa: in una funzione ausiliaria che compara due valori per vedere se sono uguali, è lecito usare come valori di ritorno LPC_OK se il confronto ha avuto successo e LPC_NOT_FOUND in caso contrario ma senza stampare errori? Oppure è meglio ritornare costanti numeriche come 0 e -1? Grazie


-- PaoloParlapiano - 07 Jul 2006

EditRecord

Ciao a tutti! qualcuno saprebbe dirmi se nella funzione EditRecord quando solo uno dei campi non è esatto, gli altri si devono inserire ugualmente o meno? Ad esempio i primi 3 nomi di campo sono esatti. Il quarto no. A questo punto dovrò modificare i primi tre o no? Nelle specifiche non è chiaro, e nel test mi fallisce sempre il confrontafiles. Grazie

-- GianlucaAlbanese - 07 Jul 2006

Errore memcmp() Test

Salve professore, il programma di test mi da errore sulla memcmp() ( le allego il risultato di valgrind ) volevo chiederle se FieldLen contiene la lunghezza solamente nel caso di stringhe o anche in caso di altri tipi di campi, visto che non riescoa spiegarmi l'errore.

8520 Invalid read of size 1 8520 at 0x1B9014A8: bcmp (in /usr/lib/valgrind/vgpreload_memcheck.so) 8520 by 0x804C9C6: ConfrontaValues (TestM4.c:1218) 8520 by 0x804A4D9: TestRead (TestM4.c:472) 8520 by 0x8048EAB: main (TestM4.c:158) 8520 Address 0x52BFDC24 is just below the stack ptr. To suppress, use: --workaround-gcc296-bugs=yes 8520 8520 Invalid read of size 1 8520 at 0x1B9014CB: bcmp (in /usr/lib/valgrind/vgpreload_memcheck.so) 8520 by 0x804C9C6: ConfrontaValues (TestM4.c:1218) 8520 by 0x804A4D9: TestRead (TestM4.c:472) 8520 by 0x8048EAB: main (TestM4.c:158) 8520 Address 0x52BFDC25 is just below the stack ptr. To suppress, use: --workaround-gcc296-bugs=yes

for (i = 0; i < NumValues; i---++)
   {
      for (j = 0; j < NUMFIELDS; j---++)
         if (!strcmp(FieldValue[i].Name, FieldData[j].Name))
            break; 
      for (k = 0; k < NUMFIELDS; k---++)
         if (!strcmp(FieldValue[i].Name, FieldValueRef[k].Name))
            break; 
      if (memcmp(FieldValue[i].value, FieldValueRef[k].value, FieldData[j].FieldLen))
         break;
   }
-- AlessioDezi - 07 Jul 2006

Re: ConfrontaValues

Serve ovviamente per confrontare i valori. Il primo loop interno serve per trovare l'indice di corrispondenza per prendere la lunghezza. Il secondo per trovare l'indice di corrispondenza tra i due vettori passati. La memcmp per confrontare il valore. questo perché la posizione del campo non è in genere la stessa nei due vettori passati alla funzione e la lunghezza non c'è nella struttura FieldValue.

-- GianniCampanile - 09 Jul 2006

Re: Re: GetFieldInfo
E' vero e' un errore nel codice. Non mi sembra che crei problemi nel Modulo4 ma tenetene conto e grazie per la segnalazione.

-- GianniCampanile - 09 Jul 2006

Re: ConfrontaFiles

Forse un problema di flush ? Ovviamente potete scrivere solo i valori da modificare, ma, non essendo sempre contigui, il posizionamento può essere più complicato che leggere tutto il record, modificare in memoria SOLO i valori richiesti e riscrivere tutto il record.

-- GianniCampanile - 09 Jul 2006

Re: FieldValue(2)

Indiche per favore il numero dei test e le righe del programma di test.

-- GianniCampanile - 09 Jul 2006

Re: Gestione della funzione errore in chiamate ad albero

Credo che le specifiche della funzione di errore rispondano alle sue domande, ma in sintesi: se una funzione intercetta un errore, a qualunque livello, deve stamparlo, liberare la memoria da lei allocata, chiudere i file da lei aperti e ritornare. Questo, in caso sia una funzione annidata, causa un albero di stampa di errori che e' proprio quello che si vuole perche' è molto più facile trovare la causa dell'errore. Per quanto riguarda le costanti, potete ovviament utilizzare qualunque costante gia' dichiarata (ad.es. LPC_OK) purché non facciate conto sul suo valore, cioè non consideriate il fatto che vale 0, altrimenti definitene di vostre.

-- GianniCampanile - 09 Jul 2006

Re: EditRecord

deve ritornare errore.

-- GianniCampanile - 09 Jul 2006

Re: Errore memcmp() Test

Mi semgra dalla valgrind ce ci siano problemi di accesso al vettore. Modifiche il file di test facendo stampare i valori che poi vengono utilizzati dalla memcmp.


-- GianniCampanile - 09 Jul 2006

Controllo Value

Professore, ho un problema che sembrerebbe inspiegabile nella read: Nel test di funzionalità con NumFields=0, quando mi fa il controllo finale, i primi 2 cicli me li passa senza problemi, poi, quando arriva i=3 mi fallisce il memcmp perchè FieldValue[i].value = 123,45599... mentre FieldValueRef[k].value = 123,456 Come è possibile una cosa del genere, anche perchè nella i=0, già l'aveva controllato con successo un NUMERIC, non credo sia un problema di conversione, perchè i valori sono troppo simili. Come posso affrontarlo questo problema? Grazie!!!

-- GiuseppeDiFederico - 09 Jul 2006

Valgrind e memoria non liberata

Ho notato che facendo girare il programma con valgrind e impostando i parametri --leak-check=full e -v trova che 40 blocchi di memoria (per un totale di 1424 bytes) vengono allocati dalla funzione Startup di TestM4.c e poi non vengono liberati. Volevo chiedere inoltre se qualcuno sa cosa si intende con (suppressed: 11 from 1) e se in qualche modo può essere collegato a questa mancata liberazione di memoria? (in pratica mi interessa sapere se con questo output per quanto riguarda gli errori di memoria sto a posto :-D) Grazie.
L'output di valgrind:

==4499==
==4499== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 11 from 1)
==4499== supp:   11 Ubuntu-stripped-ld.so
==4499== malloc/free: in use at exit: 1,424 bytes in 40 blocks.
==4499== malloc/free: 1,291 allocs, 1,251 frees, 187,368 bytes allocated.
==4499== For counts of detected errors, rerun with: -v
==4499== searching for pointers to 40 not-freed blocks.
==4499== checked 79,612 bytes.
==4499==
==4499== 355 bytes in 10 blocks are definitely lost in loss record 1 of 4
==4499==    at 0x401B8F1: calloc (vg_replace_malloc.c:279)
==4499==    by 0x804C1C4: Startup (TestM4.c:1105)
==4499==    by 0x8048C38: main (TestM4.c:114)
==4499==
==4499==
==4499== 355 bytes in 10 blocks are definitely lost in loss record 2 of 4
==4499==    at 0x401B8F1: calloc (vg_replace_malloc.c:279)
==4499==    by 0x804C14C: Startup (TestM4.c:1098)
==4499==    by 0x8048C38: main (TestM4.c:114)
==4499==
==4499==
==4499== 355 bytes in 10 blocks are definitely lost in loss record 3 of 4
==4499==    at 0x401B8F1: calloc (vg_replace_malloc.c:279)
==4499==    by 0x804C0D4: Startup (TestM4.c:1091)
==4499==    by 0x8048C38: main (TestM4.c:114)
==4499==
==4499==
==4499== 359 bytes in 10 blocks are definitely lost in loss record 4 of 4
==4499==    at 0x401B8F1: calloc (vg_replace_malloc.c:279)
==4499==    by 0x804C24E: Startup (TestM4.c:1111)
==4499==    by 0x8048C38: main (TestM4.c:114)
==4499==
==4499== LEAK SUMMARY:
==4499==    definitely lost: 1,424 bytes in 40 blocks.
==4499==      possibly lost: 0 bytes in 0 blocks.
==4499==    still reachable: 0 bytes in 0 blocks.
==4499==         suppressed: 0 bytes in 0 blocks.
-- DanieleSchirmo - 09 Jul 2006

Re: Controllo Value

Non si fidi troppo della stampa ma verifichi che i valori binari siano diversi. Se sono diversi ci deve essere un errore di lettura.

-- GianniCampanile - 10 Jul 2006

Re: Valgrind e memoria non liberata

se n'era gia' parlato in un topic precedente. Il programma di Test puo' essere "sporco", ma questo non influenza il voto. Qualunque errore o warning imputabile al programma di test non viene considerato.

-- GianniCampanile - 10 Jul 2006

Problema con il test misto

Nel test misto lei mi da CurrentRec = 1 e NumRecs = 0 quindi dovrei ritornare LPC_ERR_EOF invece lei si aspetta LPC_NOT_FOUND, perche'

// 3
   ret = LocateRecord(handle1, 3, &Record20[0], CURRENT);
   printf("Ritorno della LocateRecord: [%d]\n", ret);
   if (ret != LPC_NOT_FOUND)
     break;
-- MarioDiFrancesco - 10 Jul 2006

Errore sconosciuto

Nella funzione EditRecord() ho utilizzato la funzione InsertBlankRecord() come ausilio.
Tutto OK nel test singolo ma nel test misto, alla seconda iterazione del ciclo for, ricevo un errore del tipo
Errore della funzione CreaSpazioPerRec
che è evidentemente chiamata dalla InsertBlankRecord() e che non ho modo di controllare (facendo parte delle librerie da voi fornite).
Che genere di errore può essere?

-- MassimilianoNatale - 11 Jul 2006

Ritorno della LocateRecord

Nel caso in cui sia errato How nella locate record si deve ritornare LPC_BAD_ARG anche se nelle specifiche non vi è associazione tra questo tipo di errore è How.Un altra domanda : nel codice del test c'è di fermarsi se fine file if (ret = LPC_ERR_EOF)break; però nei ritornio della locate non è previsto questo tipo di ritorno LPC_ERR_EOF come ci dobbiamo comportare


-- AlessandroCasciaro - 11 Jul 2006

Re: Problema con il test misto

Specifiche della Locate record:
Se nel file non ci sono record viene 
*   ritornato sempre \p LPC_NOT_FOUND senza errore.

-- GianniCampanile - 11 Jul 2006

Re: Ritorno della LocateRecord?

Mi scuso per la seconda domanda su LPC_ERR_EOF distrattamente ho letto il codice della Edit.

-- AlessandroCasciaro - 11 Jul 2006

Re: Errore sconosciuto

Includa tutto l'output di errore

-- GianniCampanile - 11 Jul 2006

Re: Re: Ritorno della LocateRecord
Si, ovviamente il commento sui codici di ritorno è incompleto per quanto riguarda LPC_BAD_ARG.

-- GianniCampanile - 11 Jul 2006

Re: Re: Errore sconosciuto
Questo l'errore completo che ricevo
Errore [-6] in [CreaSpazioPerRec]-->[Errore di sistema [2] in lettura su file:[No such file or directory]]
Errore [-6] in [InsertBlankRecord]-->[Errore dalla funzione CreaSpazioPerRec:[-6]]
Errore [-5] in [EditRecord]-->[Error in Insert function]<BR>


-- MassimilianoNatale - 11 Jul 2006

Trasformazione double

Salve professore, volevo chiederle se il procedimento per trasferire un double da network in host e viceversa sia lo stesso, c'è invertire il posto di ogni byte, perche per quando riguarda la trasformazione da Host a Network il programma va tutto ok, mentre trasformando da Network a Host invertendo i byte il programma di test non trova i dati equivalenti a quelli presenti nella struttura di riferimento. Grazie.

-- AlessioDezi - 11 Jul 2006

Re: Trasformazione double

Si', e' lo stesso.

-- GianniCampanile - 11 Jul 2006

Re: Re: Re: Errore sconosciuto
Vuol dire che il file pinter non e' piu' valido. Questo succede se c'è un buffer overflow. Verifichi tutte le scritture sui vari buffer.

-- GianniCampanile - 11 Jul 2006

Chiarmiento sull'uso di GetFieldInfo

Salve. Nel mio codice io non uso la GetFieldInfo ma prendo le informazioni sui campi a mano dall'header, usando fread e fseek. E' un errore?

-- PaoloGrasso - 12 Jul 2006

Trasformazione double

Salve professore,come le ho detto precedentemente , la traformazione di un double nella edit mi funziona,ma sulla read e la locate mi da problemi, qui le allego i valori che differiscono e che fanno fallire il test.
FieldValue = 1179018854
FieldValuestr = ffFF@
FieldValueRef = 1717986918
FieldValueRefstr = fffffFF@

-- AlessioDezi - 12 Jul 2006

EditRecord chiarimento

Un record è composto solamente da valori separati da un Null ? quindi quando inserisco il valore FieldValue.value nel record, devo inserire un Null nel byte successivo a dove finisce il valore, esatto?

-- ColocciDaniele - 12 Jul 2006

Controlli da fare su value e sui nomi dei campi in FieldValue

Nelle specifiche c'è scritto che la funzione EditRecord restituisce LPC_BAD_ARG se value è NULL e LPC_BAD_FIELD se c'è un nome di campo non valido nella struttura FieldValue. Vorrei sapere se l'unico controllo da fare sul campo value è che si tratti di un campo non nullo (come del resto si evince dalle specifiche) e cosa si intende esattamente per nome di campo non valido, cioè dobbiamo controllare che si tratti di una stringa della giusta lunghezza e "composizione" oppure che sia presente tra i campi dei record del DBF un campo con lo stesso nome? Grazie per l'attenzione concessami.

-- AndreaNaim - 12 Jul 2006

Re: Chiarmiento sull'uso di GetFieldInfo

No, va bene.

-- GianniCampanile - 13 Jul 2006

Re: Trasformazione double

Non capisco cosa sono quei valori, non sono double ma sembrano puntatori. In ogni caso non posso risolvere io il problema, deve trovare lei l'errore.

-- GianniCampanile - 13 Jul 2006

Re: EditRecord chiarimento

A parte che il NULL ci dovrebbe gia' essere (messo dalla InsertRecordBlank), se un campo e' piu' corto ? (ad.es. CHAR)

-- GianniCampanile - 13 Jul 2006

Re: Controlli da fare su value e sui nomi dei campi in FieldValue

Che sia un campo esistente nel DBF.

-- GianniCampanile - 13 Jul 2006

Chiarimento su LPC_ERR_EOF

Dalle specifiche non e' ben chiaro questo: nella Edit e nella Read, se non ci sono record o il file e' posizionato su EOF, oltre a ritornare LPC_ERR_EOF, devo chiamare LPC_GestioneErrore()?

-- PaoloGrasso - 13 Jul 2006

Re: Chiarimento su LPC_ERR_EOF

Si, e' un errore e va gestito come tale.

-- GianniCampanile - 13 Jul 2006

avvisi valgrind

Salve professore. Eseguendo il Test del modulo 4 con valgrind al terzo mi dà uno strano avviso. Premetto che risultati dei test sono tutti 100. Ho Visto che questo messaggio mi esce solo quando c'è da trovare un campo LOGICAL. Questo è l'avviso:
Test:[40313] Peso:[10] - [LOCATE: Funzionalita'(6)]
==9696==
==9696== Invalid read of size 1
==9696==    at 0x1B900370: strcmp (in /usr/lib/valgrind/vgpreload_memcheck.so)
==9696==    by 0x805112F: LocateRecord (LPC_LocateRec.c:1018)
==9696==    by 0x804B8F3: TestLocate (TestM4.c:800)
==9696==    by 0x8048F23: main (TestM4.c:180)
==9696==  Address 0x1BA6D269 is 0 bytes after a block of size 1 alloc'd
==9696==    at 0x1B8FFB88: calloc (in /usr/lib/valgrind/vgpreload_memcheck.so)
==9696==    by 0x8050FA1: LocateRecord (LPC_LocateRec.c:989)
==9696==    by 0x804B8F3: TestLocate (TestM4.c:800)
==9696==    by 0x8048F23: main (TestM4.c:180)
Ritorno della LocateRecord: [20]

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

Praticamente quando alloco 1 byte di memoria.
Confido in qualche delucidazione. Grazie
-- GianlucaAlbanese - 13 Jul 2006

ReadRecord e Conversione Double

Volevo porgere le seguenti domande:

Sulle specifiche si parla di conversione di Double: forse mi sfugge qualcosa... ma dove sono spuntati fuori dati di tipo double??

la senconda domanda invece riguarda la ReadRecord: non ho ben capito cosa succede quando NumValues è = a 0; L'array FieldValue lo abbiamo già (e in quel caso quanto è grande...) oppure lo dobbiamo allocare interamente noi da dentro la funzione (ma in quel caso la valgrind nn darebbe fastidio x la memoria nn disallocata??)???


-- LucaMargiani - 13 Jul 2006

struttura FIELD_VALUE_t

scusate ma ho dei problemi con la struttura FIELD_VALUE_t perchè nelle specifiche si dice che la struttura deve essere allocata dal chiamante per il numero di elementi necessari e il rispettivo campo values per contenere i valori da leggere .......ma non sempre è allocato in modo da contenere i dati da leggere esempio nel test della ReadRecord 20409 io devo copiare il campo nome di 255 ma la value è allocato a 4.....come è possibile???

-- IreneBucci - 15 Jul 2006

Risultati modulo4

Come è possibile che su 2 pc diversi con 2 diversi OS ho il 100% ed invece sui vostri test fallisco gli ultimi due???Posso capire un errore di memoria o qualcosa del genere ma che i codici di ritorno siano diversi...potete illuminarmi??

-- AlessandroMarinelli - 19 Jul 2006

Re: Risultati modulo4

Non so che dire, mi sembra ci sia un problema con la Locate per cui (ad esempio sul test misto) trova il record quando non dovrebbe esserci.

-- GianniCampanile - 19 Jul 2006

Re: struttura FIELD_VALUE_t

Non capisco il test a cui si riferisce, comunque le allocazioni sono fatte allo startup e mi sembra che siano tutte fatte secondo la lunghezza dei campi

-- GianniCampanile - 19 Jul 2006

Risulato Modulo4

Ho fatto il test del Modulo anche al laboratorio a via Salaria e mi da 100% e su altri Pc lo stesso puntegio , e non so perche nel resulatato ho 86,89%

-- AlbanKomici - 19 Jul 2006

Re: Risultati modulo 4

Scusa ma dove li vedete i risultati?

-- GiuseppeDiFederico - 21 Jul 2006

Data pubblicazione risultati

Quando sarà possibile conoscere l'esito dell'esame?

-- MassimilianoNatale - 22 Jul 2006

ATTENZIONE ESAME LUGLIO STERBINI

Chi vuole dare l'esame con il professor Sterbini a Luglio deve mandare una mail (vedere nella pagina di Verbalizzazione). Prima dell'esame saranno corretti SOLO i compiti di chi deve sostenere l'esame.

-- GianniCampanile - 23 Jul 2006

Re: (senza titolo)


-- AlbanKomici - 24 Jul 2006

Re: Verbalizzazione

Scusa ma l'email a chi deve essere mandato a Prof. Camapinle || Sterbeni

-- AlbanKomici - 24 Jul 2006

Voto totale Modulo 4

Una domanda...ma il voto totale del modulo nn dovrebbe essere la media tra il test e l'aderenza alle specifiche(normalizzata a 100)??anche perchè...(100---+48)/2 = 74 = BUONO....

-- AlessandroMarinelli - 21 Aug 2006

Re: Voto totale Modulo 4

anche io l'ho notato... ho già mandato una mail big grin

-- DanieleSchirmo - 21 Aug 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 - 24 May 2006

Edit | Attach | Watch | Print version | History: r141 < r140 < r139 < r138 < r137 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r141 - 2006-08-21 - DanieleSchirmo






 
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-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback