Domande sul ModuloTre (aggiunta e cancellazione di record vuoti)

In questa pagina potete porre domande sul ModuloTre.

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


Include del Modulo 3

Per accedere alla struttura che gestisce gli handle, posso "includere" la Include del Modulo 2 in modo da accedere a quella struttura? Perché non mi viene in mente altro. Grazie.

-- EmanueleGallo - 04 May 2006

Re: Include del Modulo 3

No. Non si può accedere a nessuna struttura interna degli altri moduli. Si possono però utilizzare le funzioni di INTERFACCIA dei Moduli 1 e 2.

-- GianniCampanile - 04 May 2006

Re: Re: Include del Modulo 3
Ah quindi intende dire che devo usare le funzioni dei due moduli precedenti per creare il file o aprirlo e poi gestire il tutto?

-- EmanueleGallo - 04 May 2006

Relazione tra handle e filepointer

professore, io nel modulo 2 usavo un vettore di strutture, quindi il filepointer del file aperto nn me lo perdevo perchè lo conservavo in vettore[handle].filepointer , rintracciabile per tanto abbastanza facilmente dato che ogni funzione mi passava l'handle. La domanda che volevo porle è per tanto la seguente: non potendo sfruttare la mia precedente struttura, come faccio dall'handle a risalire al puntatore a file?

-- GiuseppeDiFederico - 04 May 2006

Re: Relazione tra handle e filepointer

Mi sa che stiamo facendo quasi la stessa domanda. Infatti quello che non capisco è come faccio attraverso le funzioni di interfaccia a prendere quella struttura che avevo creato nel Modulo 2. Cioè qua mi perdo tutto. frown

-- EmanueleGallo - 04 May 2006

Re: Relazione tra handle e filepointer

Esiste il modo tramite le funzioni di interfaccia. Risposta generale: NON PENSATE AD UTILIZZARE QUELLO CHE AVETE FATTO ALL'INTERNO DEGLI ALTRI MODULI, MA SOLO LE FUNZIONI DI INTERFACCIA CHE VI VENGONO DATE DALLE LIBRERIE DEI MODULI PRECEDENTI. La libreria del Modulo1 la avete già, quella del modulo 2 sarà disponibile entro oggi.

-- GianniCampanile - 04 May 2006

Re: Re: Relazione tra handle e filepointer
Le faccio un esempio. Funzione InsertBlankRecord (). Mi si chiede, dopo aver creato il nuovo record, di modificare il valore del record corrente (che diventa così il nuovo record inserito). Il record corrente, però, è identificato da una variabile che si trova nella struttura che gestisce gli handle. Come faccio a modificarlo tramite le sole funzioni di interfaccia?

-- EmanueleGallo - 04 May 2006

warning in TestM3.c

manca un %d nella printf linea 661 smile


-- GabrieleGristina - 04 May 2006

Re: Re: Relazione tra handle e filepointer
Se lei ha messo il record corrente come variabile e usa quel valore nella GetDBFInfo() allora non ha seguito le specifiche di sviluppo per il Modulo2 (ricontrolli!). Questo non la penalizzerà per il Modulo 2 ma per il Modulo 3 deve fare più attenzione, un errore del genere la penalizzerebbe molto (peso 8). Ribadisco che avete tutti gli strumenti e le funzioni. Non dimenticate che ogni Modulo è stato sviluppato e testato nelle vostre stesse condizioni, quindi la fattibilità è sicura.

-- GianniCampanile - 04 May 2006

Re: warning in TestM3.c

La riga mi sembra corretta. Qual è il warning ?

-- GianniCampanile - 04 May 2006

Sempre Handle.....

Gentile Prof, Mi scuso se la mia domanda dovesse sembrare ripetitiva,ma l'unica funzione del modulo precedente che poteva ritornare un'handle era la open e la inseriva in un vettore di strutture per l'handling dei file ahimè definito in LPC_M2_Include.h e quindi (per quanto extern) invisibile alle funzioni di questo modulo.Non vedo quindi una soluzione possibile se non l'inclusione di LPC_M2_Include.Potrebbe darci qualche delucidazione in più?

-- TullioSebastiani - 04 May 2006

Re: Sempre Handle.....

Posso dare ancora lo stesso consiglio: dimenticate quello che avete fatto e partite con quello che dovete fare e quello che avete, cioè le librerie dei due moduli precedenti. In altre parole la funzione OpenDatabaseFile (e le altre) ce l'avete ancora, solo che non sapete dove e come meomorizzano le informazioni; vi dovete accontentare di quello che viene "esposto" da quella e dalle altre funzioni (GetDBFInfo(), GetFieldInfo(), etc.)

-- GianniCampanile - 04 May 2006

Apertura File...

Salve, ho compreso benissimo il suo discorso, ma non riesco a capire una cosa, le funzioni di interfaccia del M2, mi danno: 1)Un handle con la Open 2)Posso controllare se l`handle e` valido

Ma il puntatore al file che e` stato aperto nella Open chi me lo da?


-- Users.691942 - 04 May 2006

Re: Apertura File

io vi suggerirei la getDBFInfo(). ...

-- AlessioDezi - 04 May 2006

Re: Apertura File

Non credo perche` sempre se non sbaglio, la getDBFInfo() mi ritorna solo il nome del DataBase e quindi io sarei costretto a riaprirlo (spreco risorse), invece avedo gia` il puntatore sfrutterei l`apertura fatta nella Open()

-- Users.691942 - 04 May 2006

ATTENZIONE! PRIMA DI POSTARE LEGGETE LE SPECIFICHE

Come regola generale evitate di postare se non leggete prima le specifiche almeno dell'argomento trattato. Questo è un blog di chiarimenti sulle specifiche, se volete scambiare informazioni su quali funzioni utilizzare potete utilizzare l'apposita pagina per gli OffTopic.

-- GianniCampanile - 04 May 2006

Re: Apertura File

no, la GetDBFInfo riempie una struttura DBF_INFO_t (che contiene anche un file pointer)

-- StefanoLombardi - 04 May 2006

Domanda sui test

Salve, volevo sapere se anche per questo modulo vale la sequenzialità dei test. Grazie

-- PaoloParlapiano - 04 May 2006

Re: Domanda sui test

Per questo modulo la sequenzialità dei test è indispensabile. Da questo deriva che è necessario sviluppare le funzioni secondo l'ordine in cui vengono testate, cioè: InsertBlankRecord(), GotoRecord(), DeleteRecord().

-- GianniCampanile - 04 May 2006

Sistema operativo Mac OS usato per i test

Quale sarà la versione del sistema operativo Mac usata per i test?

-- ValerioMauro - 04 May 2006

Re: warning in TestM3.c

ecco la riga: printf("Numero record o record corrente errato\n", ret);

come fa ad essere corretta? cmq e' quasi ininfluente...


-- GabrieleGristina - 05 May 2006

Test 30103

Salve, ho un problema con il test 30103, quello della insert record caso TOP. Nonostante il file "Prova.dbf" da me modificato viene esattamente di 193 byte (117+38*2) e il contenuto sia IDENTICO in ogni singolo byte al ProvaTest2.dbf dopo l'inserimento del record vuoto all'inizio del DB e spostamento del record esistente, il test mi fallisce perchè la DBFInfo della libreria rilasciata da voi mi dà NumRecs=1 CurrentRec=1 quando NumRecs dovrebbe essere 2. Il file è di 193 byte e non 198 perchè dopo innumerevoli tentativi ho dovuto commentare i restanti test della Insert, per togliere le ulteriori modifiche al Prova.dbf al fine di controllare il contenuto del file fino a quell'istante. L'ho fatto perchè ovviamente il problema lo riscontro già con il sorgente originale. Dove sta l'errore? Come mai i files sono identici ed il numero di records restituito è sempre 1 nonostante RecordLen=38 e 193 + giustamente 117+ (38 * 2 records)? Grazie

-- PaoloParlapiano - 05 May 2006

Re: Re: warning in TestM3.c
Il numero di riga non mi corrispondeva. Questa riga è sbagliata, metteremo una nuova versione in linea prima possibile.

Grazie.


-- GianniCampanile - 05 May 2006

Test a 64 bit

Vedendo il modo in cui si vuole testare il codice da noi scritto, mi è sorto un dubbio. Avete detto che verrano testati sulle piattaforme dei vari docenti (un mac compreso). Ma se queste piattaforme sono a 32 bit, ed avete una (non so ) a 64 bit, come verrà fatto il test multipiattaforma? Potete poi, per favore, mettere che tipo di piattaforme di test sono? Almeno le versioni del GCC? Grazie

-- AndreaPecchi - 05 May 2006

Problemi con libreria modulo2.a da voi rilasciata

Scusi professore, non so dove chiedere, perciò mi permetto di scrivere qui. Ho inserito la libreria modulo2.a nel mia directory del progetto, ho fatto un "touch" e ho richiamato "make all", come da lei descritto nel caso della libreria modulo1.a.. Tuttavia ho notato che il risultato conseguito lanciando i test rimane lo stesso che avevo prima (63.30).. Mi può per favore rispiegare meglio la procedura? Probabilmente ho sbagliato qualcosa...Grazie.

-- AndreaCosentino - 05 May 2006

Re: Problemi con libreria modulo2.a da voi rilasciata

Verifichi che il make non ricrei la libreria. Il touch va fatto solo sulla libreria. Se le da ancora errore mi dica quali sono i test che non passa.

-- GianniCampanile - 05 May 2006

*ATTENZIONE! NUOVA VERSIONE FILE DI TEST *

E' stata rilasciata nella pagina ModuloTre una nuova versione dei test. Corregge un errore che non da' problemi in esecuzione ma da' dei warning.

-- GianniCampanile - 05 May 2006

domanda sulla funzione DeleteRecord

per cancellare un record dopo aver effettuato uno scostamento per cancellare il record corrente, mi resta l'ultimo record copiato due volte... come faccio a troncare il file alla nuova dimensione?? si può tipo scrivere EOF alla posizione di inizio dell'ultimo record?

-- StefanoLAVAGNO - 05 May 2006

domanda su InsertRecord

Per fare spazio al nuovo record possiamo usare la fread per copiarci il blocco che andrà spostato, per poi reinserirlo dopo aver messo il nuovo record?

-- EmanueleGallo - 05 May 2006

Re: domanda sulla funzione DeleteRecord

Lo dovete scoprire voi. Per favore chiedete solo chiarimenti sulle specifiche.

-- GianniCampanile - 05 May 2006

Re: domanda su InsertRecord

Certamente. Come suggerito nelle specifiche interne, conviene che il "blocco" sia un record, il ciclo è un po' più semplice.

-- GianniCampanile - 05 May 2006

Re: Re: domanda su InsertRecord
Ok, ma quando leggiamo dobbiamo sempre fare la solita conversione in Host Byte Order e viceversa?

-- EmanueleGallo - 05 May 2006

Formato di un record

Nelle specifiche c'è scritto che la lunghezza del record è pari alla somma delle lunghezze dei campi. Però quelle scritte nella documentazione non sono le lunghezze dei campi ma sono le lunghezze dei tipi dei campi. Non è la stessa cosa. La lunghezza di un record non dovrebbe essere data dal numero di campi per la lunghezza di ogni definizione del campo?

-- EmanueleGallo - 05 May 2006

[Linker error] undefined reference to `CloseDatabaseFile'

E' il messaggio che ricevo su tutte le funzioni dei moduli precedenti; infatti quando faccio il linker sulle librerie Modulo2.a e Modulo1.a (fornite dai Voi), se invece uso le mie librerie dei progetti precedenti linka correttamente; siccome pero' vorrei usare le vostre, per essere sicuro dei risultati, come potrei fare? Lavoro in ambiente Cdev-Cpp in Windows Xp. grazie mille per l'attenzione.


-- GiovanniLucaSorrentino - 05 May 2006

Formato del timestamp

Un'altra domanda smile . Il timestamp in che formato bisogna modificarlo? Basta una chiamata a time()?

-- EmanueleGallo - 05 May 2006

Re: 30103

Salve, volevo solo dire che il problema era nel mancato aggiornamento del numero di records nel file. Ora funziona tutto correttamente

-- PaoloParlapiano - 05 May 2006

Altra domanda sulla sequenzialità dei test

Salve, ho una domanda: tutti i test in sequenza mi danno 100%, però ho notato che rifacendo un secondo giro senza uscire dal programma di test molti falliscono: ciò significa che una volta fatti tutti i test bisogna rilanciare il TestM3 per fare un nuovo test completo o dovrebbe funzionare ugualmente anche senza uscire dal programma? Grazie.

-- PaoloParlapiano - 06 May 2006

Come si muove L'EOF ?!?

Gentile professore, ho dei problemi nel capire come si comporta il programma quando inserisco un record, mi spiego meglio: Nell'insert noi dobbiamo translare tutti i record successivi a quello da inserire "una posizione più in basso" quindi, la posizione dell'EOF cambierà dopo questa operazione, ma il programma lo farà in modo automatico, o siamo noi che dobbiamo settargli in qualche modo il nuovo EOF. Se come penso il programma lo fa in modo automatico, come fare a scrivere qualcosa dopo la fine del nostro FILE, sò che per la maggior parte questa può sembrare una cacchiata, ma non riesco proprio a concepire il concetto di scrittura dopo la fine del file (Per quanto riguarda la Delete, ho capito bene come fare visto che è scritta esplicitamente nelle specifiche la funzione da utilizzare) !!

Grazie


-- GiuseppeDiFederico - 06 May 2006

warning misteriosi......

gentile prof., vedendo i log dei risultati del modulo 2 ho notato che ci sono dei warning che non solo non erano assolutamente presenti nella mia compilazione,ma di cui ignoro anche la possibile soluzione! Potrebbe darmi una spiegazione riguardo il loro significato?
warning: incompatible implicit declaration of built-in function 'strlen'

e lo stesso per molte funzioni di libreria come strcpy strcmp etc.
-- TullioSebastiani - 06 May 2006

Re: warning misteriosi......

Caro Tullio, anche io mi sono imbattuto nel Modulo 1 in quei tipi di warning il perchè ? Per alcuni compilatori occorre includere <string.h> cosa che tu evidentemente non hai fatto (Come non avevo fatto io nel modulo 1) Il problema è che te, come me, non hai visto quei Warning, ma sulla macchina di Sterbini, saltano fuori!!

-- GiuseppeDiFederico - 06 May 2006

Re: warning misteriosi......

..Per alcuni compilatori occorre includere string.h ... (L'avevo racchiso tra < e > e non me l'ha scritto sul messaggio precedente)

-- GiuseppeDiFederico - 06 May 2006

Chiarimento sui file Modulo1.a e Modulo2.a

Salve,dopo aver copiato correttamente il file Modulo2.a in Modulo2/lib e aver fatto il touch sono andato a vedere se tutto era ok anche nella cartella Modulo1/lib e ho notato che non c'era più il file Modulo1.a (file di circa 66 kb fornito da voi) che avevo copiato nella cartella ma era presente il file che si riferiva alla mia vecchia compilazione. Ho provato a rifare la stessa operazione di touch ma questa volta non ha funzionato.Vorrei sapere se è tutto nella norma oppure se anche il file Modulo1.a, come il file Modulo2.a, deve essere quello fornito da voi per evitare possibili problemi di compilazione nel Modulo 3

Grazie


-- AntonioCola - 06 May 2006

Conversione e scrittura non bufferizzata

1) La conversione Network to Host, almeno nel caso della funzione GotoRecord() poichè è l'unica che ho iniziato a sviluppare, viene fatta direttamente dalla funzione di interfaccia utilizzata per estrapolare le informazioni (come penso)?

2) Viene inoltre proibito l'uso di buffer di appoggio nello spostamento dei dati. Ma senza buffer com'è possibile fare questi spostamenti?


-- MassimilianoNatale - 06 May 2006

Re: Altra domanda sulla sequenzialità dei test

Ovviamente il file Prova.dbf alal fine di un giro di test è stato modiicato, qundi va copiato nuovamente quello iniziale.

-- GianniCampanile - 06 May 2006

Re: Chiarimento sui file Modulo1.a e Modulo2.a

Vanno utilizzate entrambe le librerie fornite da noi, perché quello è il modo con cui noi faremo i test..

-- GianniCampanile - 06 May 2006

Che cosa bisogna leggere...

Non ho capito bene ancora cosa bisogna leggere del file, cioè quale parte del file. Perché ad esempio uno dei vostri file ProvaTest.dbf, hanno il solito header e le solite definizioni dei campi. Non capisco quale parte forma il record.

-- EmanueleGallo - 06 May 2006

(getDBFInfo) Referenze nn definite

salve,nelle mie compilazioni il gcc quando và a linkare il Modulo3.a ricerca la funzione getDBFInfo ma non e mi dà un errore di "Undefinited Reference" dove è il problemA?..emh il modulo2.a esiste!!!

-- AntonioFaonio - 06 May 2006

Re: (getDBFInfo) Referenze nn definite

mispelling; si chiama "GetDBFInfo", con la G maiuscola.

-- StefanoLombardi - 07 May 2006

Re: Conversione e scrittura non bufferizzata

Alt!! Nn credo che sul punto 2 tu abbia ragione perchè sulle specifiche nn è scritto da nessuna parte che è proibito un buffer d'appoggio (anche perchè è necessario) è proibito bensì creare un file d'appoggio, il professore mi correga se sbaglio !!!

-- GiuseppeDiFederico - 07 May 2006

Test Misto

premetto ke a tutti i test ho il 100% tranne al test misto ke produce questi return:

Test MISTO Test:[30401] Peso:[15] - [MISTO: Funzionalita' miste] Ritorno della GetDBFInfo: [0] Ritorno della GotoRecord: [1] Ritorno della DeleteRecord: [0] Ritorno della DeleteRecord: [0] Ritorno della DeleteRecord: [0] Errore [-12] in [elimina_rec]-->[Errore fine file, nessun record corrente:[-12]] Errore [-12] in [DeleteRecord]-->[Errore chiamata alla elimina_rec:[-12]] Ritorno della DeleteRecord: [-12] Ritorno della InsertBlankRecord: [0] Errore [-7] in [GetDBFInfo]-->[Errore di sistema [2] in spostamento su file [No such file or directory]] Errore [-7] in [scrivi_rec]-->[Errore chiamata alla GetDBFInfo:[-7]] Errore [-7] in [InsertBlankRecord]-->[Errore chiamata alla inserisci_rec:[-7]] Ritorno della InsertBlankRecord: [-7]

ID: 30401 PESO: 15 PASS: 0

Fine Test [MISTO]: Numtests:[1] Totvalue:[15] Passed:[0] Score:[0.00]

vorrei sapere siccome chiama un errore di spstamento su file alla GetDBFInfo che è una funzione data da voi che è compresa nel modulo2.a se il problema dipende da me oppure dalla funzione fatta da voi!!! grazie


-- FilippoMazzei - 07 May 2006

Re: Re: Conversione e scrittura non bufferizzata
Corretto.

-- GianniCampanile - 08 May 2006

Re: Test Misto

Il problema dovrebbe dipendere dal suo codice; l'errore ritornato indica che il file pointer utilizzato, interno e non visibile, punta a un file non esistente. E' un errore poco probabile, quindi verificherei se c'è stato uno sfondamento di memoria o qualcosa che abbia potuto corrompere la struttura FILE interna.

-- GianniCampanile - 08 May 2006

Re: Inserimento del record bianco

Gentile Prof, Le cito una parte delle specifiche che non ho ben capito: Il record di un DBF ha come lunghezza totale la somma delle lunghezze dei campi così calcolate:

CHARACTER - Lunghezza del campo + 1 per il NULL NUMERIC - sizeof(double) + NULL DATE - sizeof(long) + NULL LOGICAL - sizeof(char) + NULL ... Successivamente dite: Il record inserito è composto di tutti valori NULL. Quindi in character ci va NULL (quindi /0) perchè va riempito di NULL ?!? oppure ci va lunghezza del campo +1 per il NULL ?!? E negli altri, sò che per la maggior parte di voi è banale, ma per me no.

Grazie


-- GiuseppeDiFederico - 08 May 2006

Re: Re: Inserimento del record bianco
Non è che la domanda sia molto chiara. In ogni caso il significato delle specifiche è che un record "vuoto" è composto di tutti caratteri NULL, qualunque sia il tipo campo. La lunghezza del campo serve solo per calcolare la lunghezza da scrivere nell'header, sviluppato nel Modulo1.

-- GianniCampanile - 08 May 2006

Re: Re: Inserimento del record bianco
Può forse significare che se la lunghezza del campo CHARACTER è 5 nel file ci va \0\0\0\0\0\0 ? Ed in numeric ci và: \0\0\0\0\0 ? Mi scuso se ho occupato 2 spazi ma ci ho pensato dopo? !!!

-- GiuseppeDiFederico - 08 May 2006

Re: Re: Chiarimento sui file Modulo1.a e Modulo2.a
Mi sono imbattuto nel tuo stesso problema (a sentire gli altri studenti un po a tutti ha portato via un po di tempo). Io ho fatto così: make clean del modulo1/2, e poi ho semplicemente copiato il file del professore in lib, non dovrai sovrascrivere perchè la make clean ti ha cancellato il tuo, poi non makkare + .... ovviamente non potrai eseguire il test, ma che ti frega, l'importante è che il modulo successivo ti agganci il modulo1/2.a del prof

-- GiuseppeDiFederico - 08 May 2006

File compare

Professore, le scrivo perchè il test dell'insert non mi passa la funzionalità, più precisamente non mi passa il vostro ultimo test, quello che confronta i file. Ora, io sono sicuro di aver fatto correttamente la funzione di inserimento, e non mi spiego perchè quando faccio: od -c Prova.dbf mi dà la prima riga differente dal vostro file di test od -c ProvaTest2.dbf, quella parte del file infatti, io non l'ho toccata affatto, e poi i primi undici byte del file, dovrebbero essere P r o v a \0 \0 \0 \0 \0 \0 \0 perchè, la mia prima riga invece è "sporca"? (C'è una D un _ una E ed un 312 che non c'entrano nulla) GRAZIE
[giuseppe@localhost test]$ od -c ProvaTest2.dbf
0000000   P   r   o   v   a  \0  \0  \0  \0  \0  \0  \0 006  \0  \0  
0000020 002  \0   u  \0   &   D   J 016 027   C   a   m   p   o   1  
0000040  \0  \0  \0  \0  \0 001  \0  \n   C   a   m   p   o   2  \0  
0000060  \0  \0  \0  \0 002  \0  \b   C   a   m   p   o   3  \0  \0  
0000100  \0  \0  \0 003  \0 004   C   a   m   p   o   4  \0  \0  \0  
0000120  \0  \0 004  \0 001   C   a   m   p   o   5  \0  \0  \0  \0  
0000140  \0 001  \0 001   C   a   m   p   o   6  \0  \0  \0  \0  \0  
0000160 002  \0  \b  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  
0000200  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  
0000220  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0   
0000240  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  
*
0000300  \0
0000301
[giuseppe@localhost test]$ od -c Prova.dbf
0000000   P   r   o   v   a  \0  \0  \0   D   _   E 312 006  \0  \0  
0000020 004  \0   u  \0   &   D   J 016 027   C   a   m   p   o   1  
0000040  \0  \0  \0  \0  \0 001  \0  \n   C   a   m   p   o   2  \0  
0000060  \0  \0  \0  \0 002  \0  \b   C   a   m   p   o   3  \0  \0  
0000100  \0  \0  \0 003  \0 004   C   a   m   p   o   4  \0  \0  \0  
0000120  \0  \0 004  \0 001   C   a   m   p   o   5  \0  \0  \0  \0  
0000140  \0 001  \0 001   C   a   m   p   o   6  \0  \0  \0  \0  \0  
0000160 002  \0  \b  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  
0000200  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  
*
0000300  \0  \0  \0  \0  \0   B  \0  \0  \0  \0  \0  \0  \0  \0  \0  
0000320  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  
0000340  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0   C  \0  \0  \0  
0000360  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  
0000400  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000415

-- GiuseppeDiFederico - 08 May 2006

Re: File compare

Il file Prova.dbf va ricopiato al termine di ogni sessione di test, altrimenti rimane "sporco". A parte questo, il file Prova.dbf viene modificato solo dalle funzioni che state sviluppando, non so perché ci siano quei caratteri errati. Riparta dall'inizio e verifichi il file dopo ogni chiamata di funzione, magari modificando temporaneamente il file di test o utilizzando un debugger.

-- GianniCampanile - 08 May 2006

Lunghezza di un record

Perchè calcolarsi la lunghezza del record quando la funzione GetDBFInfo() ci fornisce anche il valore RecordLen relativo proprio alla lunghezza di un record?

-- MassimilianoNatale - 08 May 2006

Re: Formato del timestamp

Ripropongo il mio quesito. Quando dobbiamo modificare il timestamp, in che formato va modificato?

-- EmanueleGallo - 08 May 2006

Re: Lunghezza di un record

è una domanda retorica? big grin
io mica la calcolo infatti :P

-- StefanoLombardi - 08 May 2006

Re: Re: Formato del timestamp
Il formato dei campi dell'header è stato definito nel Modulo 1.

-- GianniCampanile - 09 May 2006

RE: chiarimento sulle specifiche

Salve, volevo sapere se era possibile usare la GotoRec all'interno delle altre due funzioni da sviluppare. Grazie

-- GabrieleGristina - 09 May 2006

Re: chiarimento sulle specifiche

Si.

-- GianniCampanile - 09 May 2006

libreire per architetture a 64 bit

Professor sterbini può cortesemente mettere on line le due librerie .a per l'architettura in oggetto? Purtroppo ho solo questa macchina a disposizione e senza queste librerire non posso sviluppare il modulo. Grazie

-- SimoneDiCola - 09 May 2006

Re: libreire per architetture a 64 bit

Ma non ho parlato con lei oggi a fine lezione ?

-- GianniCampanile - 09 May 2006

Re: libreire per architetture a 64 bit

No, non sono io.

-- SimoneDiCola - 09 May 2006

Re: altro chiarimento sulle specifiche

"Il record corrente viene settato a 1, anche se non ci sono record nel DBF."

Questa e' frase presa dalle specifiche del modulo2, secondo me errata. Nel modulo3 se, per esempio, aggiungiamo un record dobbiamo incrementare CurrentRec di 1. CurrentRec e' un campo della struttura DBF_INFO_t, noi non possiamo aggiornarlo usando le sole funzioni di interfaccia dei vari moduli, inoltre seguendo le specifiche del modulo2, ogni volta che chiamiamo la GetDBFInfo, il campo CurrentRec sara' sempre 1... Nella pagina del modulo2 sono state fatte svariate domande su questo fatto.. ce la date cortesemente questa risposta? (Che non sia "usate le nostre librerie" xke' non e' una risposta). Grazie


-- GabrieleGristina - 09 May 2006

Re: Re: Formato del timestamp
Questo lo sapevo anch'io :). Quello che mi chiedo è che siccome il Julian Date non l'abbiamo più usato, che formato dobbiamo usare? Non ne avete più parlato.

-- EmanueleGallo - 09 May 2006

Re: Re: Re: Formato del timestamp
Ma non si era detto di usare il risultato di time() ?

-- AndreaSterbini - 09 May 2006

CHIEDO SCUSA A TUTTI

Per eliminare un mio post, sono sparite tutte le domande frown frown frown . Non si ripeterà mai più. Se posso in qualche modo riparare lo farò. Scusate!!!!!!!!

-- EmanueleGallo - 09 May 2006

Re: Professore?!?

Spero che i prof riescano a ripristinare questa cacchio di pagina, altrimenti da qua al termine di consegna ci ritroveremo a fare le stesse domande già poste in precedenza, sarebbe uno spreco di tempo e risorse considerevole

-- GiuseppeDiFederico - 09 May 2006

Domanda sulla patch di correzione

Lo so che non andrebbe qui questa domanda, ma ho dimenticato di chiederlo a lezione. La patch (e vorrei rimandare il file Readme.txt in cui mi sn dimenticato di scrivere la versione del compilatore) dove va consegnata? Spedisco uno zip nella pagina di consegna?

-- FedericoFranzoni - 09 May 2006

Re: CHIEDO SCUSA A TUTTI

basta fare un copia-incolla da una revision precedente della pagina; ora lo faccio...

EDIT: fatto wink


-- StefanoLombardi - 09 May 2006

Re: CHIEDO SCUSA A TUTTI

Avevo provato, ma avevo perso anche quella. Ti ringrazio tantissimo. Mi farò i cavoli miei la prossima volta. smile

-- EmanueleGallo - 09 May 2006

ATTENZIONE! errore nelle specifiche interne

Nelle specifiche interne viene detto di utilizzare la funzione truncate(); utilizzate la ftruncate() invece.

-- GianniCampanile - 09 May 2006

Re: ftruncate()

Perché dobbiamo usare questa? Questa funzione in ingresso riceve un descrittore di file e non un file pointer. Come facciamo?

-- EmanueleGallo - 09 May 2006

Re: Re: Re: librerie per architetture a 64 bit
Per chi ha problemi con l'opzione -m32 può utilizzare le istruzioni contenute in questo blog http://miniprep.caltech.edu/~remote/blog/ . Il problema è che una volta fatto ciò, compilando ho questi errori :

(22:13:13) scuffio: simone@localhost Modulo3]$ make all
gcc -c -g -m32   -I include -I ../include src/LPC_InsertRec.c -o obj/LPC_InsertRec.o
gcc -c -g -m32   -I include -I ../include src/LPC_GotoRec.c -o obj/LPC_GotoRec.o
gcc -c -g -m32   -I include -I ../include src/LPC_DeleteRec.c -o obj/LPC_DeleteRec.o
gcc -c -g -m32   -I include -I ../include src/LPC_Common.c -o obj/LPC_Common.o
ar rc lib/Modulo3.a obj/LPC_InsertRec.o obj/LPC_GotoRec.o obj/LPC_DeleteRec.o obj/LPC_Common.o
gcc -c -g -m32   -I include -I ../include test/TestM3.c -o test/TestM3.o
gcc test/TestM3.o ../obj/LPC_Err.o lib/Modulo3.a ../Modulo2/lib/Modulo2.a ../Modulo1/lib/Modulo1.a -o test/TestM3
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.0.2/../../../libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.0.2/../../../libc.a when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
make: *** [test/TestM3] Error 1

Da cosa dipendono ?
-- SimoneDiCola - 09 May 2006

Re: Re: Re: librerie per architetture a 64 bit
Risolto! Ad ogni modo se mettete a disposizione i vostri file sarebbe meglio.

-- SimoneDiCola - 09 May 2006

Re: Re: Re: librerie per architetture a 64 bit
A questo punto il risultato è questo. Cosa altro c'è da modificare ?
[simone@localhost Modulo3]$ make all
gcc -c -g -m32  -I include -I ../include src/LPC_InsertRec.c -o obj/LPC_InsertRec.o
gcc -c -g -m32  -I include -I ../include src/LPC_GotoRec.c -o obj/LPC_GotoRec.o
gcc -c -g -m32  -I include -I ../include src/LPC_DeleteRec.c -o obj/LPC_DeleteRec.o
gcc -c -g -m32  -I include -I ../include src/LPC_Common.c -o obj/LPC_Common.o
ar rc lib/Modulo3.a obj/LPC_InsertRec.o obj/LPC_GotoRec.o obj/LPC_DeleteRec.o obj/LPC_Common.o
gcc -c -g -m32  -I include -I ../include test/TestM3.c -o test/TestM3.o
gcc -c -g -m32  -I include -I ../include ../src/LPC_Err.c -o ../obj/LPC_Err.o
gcc test/TestM3.o ../obj/LPC_Err.o lib/Modulo3.a ../Modulo2/lib/Modulo2.a ../Modulo1/lib/Modulo1.a -o test/TestM3
/usr/bin/ld: warning: i386 architecture of input file `test/TestM3.o' is incompatible with i386:x86-64 output
/usr/bin/ld: warning: i386 architecture of input file `../obj/LPC_Err.o' is incompatible with i386:x86-64 output
/usr/bin/ld: warning: i386 architecture of input file `lib/Modulo3.a(LPC_InsertRec.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: warning: i386 architecture of input file `lib/Modulo3.a(LPC_GotoRec.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: warning: i386 architecture of input file `lib/Modulo3.a(LPC_DeleteRec.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: warning: i386 architecture of input file `lib/Modulo3.a(LPC_Common.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: warning: i386 architecture of input file `../Modulo2/lib/Modulo2.a(LPC_OpenDBF.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: warning: i386 architecture of input file `../Modulo2/lib/Modulo2.a(LPC_DBFInfo.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: warning: i386 architecture of input file `../Modulo2/lib/Modulo2.a(LPC_CloseDBF.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: warning: i386 architecture of input file `../Modulo2/lib/Modulo2.a(LPC_IsDBF.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: warning: i386 architecture of input file `../Modulo2/lib/Modulo2.a(LPC_Common.o)' is incompatible with i386:x86-64 output

-- SimoneDiCola - 09 May 2006

Re: Re: ftruncate
nelle specifiche di non ricordo quale modulo vengono anche indicate le funzioni da usare per effettuare conversioni da file pointer a descriptor e viceversa; prova "man fileno", e l'altra non la ricordo.

-- StefanoLombardi - 09 May 2006

Ritorno LPC_ERR_READ in GotoRecord()

Tra i possibili valori di ritorno della funzione GotoRecord() compare anche il valore LPC_ERR_READ.
In che caso bisogna ritornare un errore simile?

-- MassimilianoNatale - 09 May 2006

Re: Re: domanda su InsertRecord
Professore se noi spostiamo un blocco di record alla volta come facciamo a sapere quanti record ci sono??dobbiamo calcolarlo noi?Ho provato a leggere il NumRecord dal dbf ma se nn ho sbagliato i calcoli sulla seek questo è settato a 0.

-- AlessandroMarinelli - 10 May 2006

Re: Re: Re: domanda su InsertRecord
Mi correggo...nel Prova.dbf c'è il valore 1 in NumRecs...ma la vostra funzione GetDBFInfo gli passa sempre 0 in NumRecs...è possibile?xkè sia a me nella mia insert che nel testM3 viene passato 0...ho controllato fancendo le printf senza modificare il numero di record.

-- AlessandroMarinelli - 10 May 2006

Nuovo record

Una cosa che non ho capito è quanto deve essere "grande" il record che inseriamo. Cioè mi spiego. Sulle specifiche c'è scritto che il record è dato dalla somma delle lunghezze dei campi. Quindi devo calcolarcele tutte? Poi che significa "lunghezza del campo +1", come faccio a sapere la lunghezza del campo? Grazie. smile

-- EmanueleGallo - 10 May 2006

Re: chiarimento su truncate/ftruncate

Per quale strano motivo dobbiamo usare ftruncate se la GetDBFInfo restituisce un file pointer invece di un file descriptor?

-- GabrieleGristina - 10 May 2006

Problema Modulo2.a

utilizzando le vostre librerie negli ultimi due test della InsertBlankRecord() ottengo questo un errore di posizionamento su file..come mai??
Errore [-7] in [GetDBFInfo]-->[Errore di sistema [84] in spostamento su file [Invalid or incomplete multibyte or wide character]]

-- GiuseppeLisanti - 10 May 2006

Re: problemi con Modulo2.a

Ho un problema legato alla CurrentRec, se uso la vostra libreria, il test 30103 quando testa la insertblackrecord in top e quindi richiama la getdbfinfo per capire se abbiamo aggiornato l'header, mi restituisce -1 in CurrentRec, quindi fallisce... Come mai da -1 se in nessun caso puo' tornare un numero minore di 1?

-- GabrieleGristina - 10 May 2006

Re: problemi con Modulo2.a (SOLVED)

Questo problema mi ha fatto risolvere sia questo problema, sia la risposta alla domanda fatta in precedenza sul calcolo del CurrentRec... ;>

-- GabrieleGristina - 10 May 2006

Re: Re: problemi con Modulo2.a (SOLVED)
Cioè...è un errore nostro????

-- AlessandroMarinelli - 10 May 2006

Re: Re: Re: problemi con Modulo2.a (SOLVED)
ovvio smile

-- GabrieleGristina - 10 May 2006

Re: Re: Re: problemi con Modulo2.a
Secondo me no!ho aggiunto due righe al file di testo: GetDBFInfo(handle, &DBFInfo); printf("NumRecs:%d\n, CurrentRec:%d\n", NumRecs, CurrentRec); all'inizio del test!!e questa è la stampa: Test INSERT NumRecs:0 CurrentRec:1 Test:[30101] Peso:[3] - [INSERT: Handle errato] Errore [-1] in [read]-->[Error: l'handle non è presente] Errore [-1] in [InsertBlankRecord]-->[Errore: handle non valido] Ritorno della InsertBlankRecord: [-1] Test:[30102] Peso:[3] - [INSERT: Where errato] Errore [-1] in [InsertBlankRecord]-->[Errore: Where non valido] Ritorno della InsertBlankRecord: [-1] Test:[30103] Peso:[10] - [INSERT: Funzionalita'(1)] Ritorno della InsertBlankRecord TOP: [0]


-- AlessandroMarinelli - 10 May 2006

Re: Re: Re: problemi con Modulo2.a
Io ho finito ora la insertblackrecord, mi da 100, se leggi bene le specifiche c'e' scritto cosa bisogna fare nella insert prima di ritornare LPC_OK lol

-- GabrieleGristina - 10 May 2006

Re: Re: Re: problemi con Modulo2.a
Cosa c'entra quello che hai scritto con quello che ho scritto io?Io ho fatto una prova e ho visto che la GetDBFInfo in NumRecs mette sempre 0 anche se io lo modifico...questo nn vuol dire che nel dbf nn è modificato..anzi...lo è!!!é solo che poi nella funzione di test è sempre 0!

-- AlessandroMarinelli - 10 May 2006

Delete

Professore, ho fatto tutto, mi è rimasto da superare solo un problema con la Delete : Voi dite nelle specifiche (e poi lo testate anche) che se il record corrente è l'ultimo record, allora va cancellato ed il puntatore và messo ad EOF, io l'ho fatto e l'ho messo ad EOF utilizzando fseek(fp,0,SEEK_END) . dopo di ciò percò, la GetDBFInfo mi da come record corrente -2 Cosa impossibile, perchè la libreria modulo2.a è stata fatta da voi, come fa a restituirmi un numero negativo? P.S Se commento il controllo del CurrentRec, il test passa con il 100 %

-- GiuseppeDiFederico - 10 May 2006

Valore CurrentRec

Dove bisogna registrare il valore CurrentRec? Pensavo nel file .dbf ma tra le informazioni contenute nell'header non compare quella relativa al record corrente

-- MassimilianoNatale - 10 May 2006

Re: Nuovo record

Vai su OffTopic, ho fatto la stessa domanda, guarda come mi ha risposto Sterbini, cmq per la cronaca, già lo sai quanto è lungo il record : (RecordLen) !!!

-- GiuseppeDiFederico - 10 May 2006

Re: Re: chiarimento su truncate/ftruncate

Perchè la ftruncate può operare su qualsiasi file, la truncate necessita di un file chiuso ed il nostro non lo è

-- GiuseppeDiFederico - 10 May 2006

Re: Valore CurrentRec?

Da nessuna parte, devi solo posizionare il file al punto giusto, poi la funzione GetDBFInfo del professore se lo calcola da sola.

-- GiuseppeDiFederico - 10 May 2006

Re: Delete

Professore, non capisco proprio dove sbaglio, sto diventando matto, seguo le specifiche punto per punto, tronco il file, e metto il puntatore alla fine dello stesso (ovviamente sto parlando del caso in cui il record corrente sia l'ultimo perchè è li che mi sfetecchia), dopo tutto ciò CurrentRec = -2, ma come è possibile !!

-- GiuseppeDiFederico - 10 May 2006

Re: Nuovo record

Ripropongo la domanda. Non ho capito bene come creare il nuovo record. Cioè c'è scritto che bisogna creare un record pari alla somma delle lunghezze dei vari campi; però sul campo CHARACTER, c'è scritto "Lunghezza del campo +1". Ma la lunghezza del campo chi me la dà?

-- EmanueleGallo - 10 May 2006

Re: Re: Nuovo record
Scusa non avevo letto la tua risposta prima. Comunque ho capito, quello che non capisco è questo Lunghezza del campo.

-- EmanueleGallo - 10 May 2006

Re: Re: Re: Nuovo record
Leggi le informazioni dei campi dallo header.

-- AndreaSterbini - 10 May 2006

possibile errore nei test della delete

gentile prof, forse vi è un incongruenza tra il test e le specifiche: alla fine dei test nella Goto (come da voi commentato) i record devono essere 4 e il record corrente il 4. Però nei test della Delete alla fine ci devono essere 3 record(ok) e il corrente deve essere il terzo. Non capisco come questo sia possibile, il record corrente non dovrebbe rimanere invariato anche se viene eliminato? credo che il comportamento giusto sia quello della mia funzione che ritorna come corrente il 4(ossia la fine del file). Se sbaglio nel ragionamento potrei sapere in quale punto??? grazie


-- MarcoLaVecchia - 10 May 2006

Re: Re: Delete
La GetDBFInfo calcola il record corrente a partire dalla posizione del puntatore nel file. Se il puntatore è posizionato correttamente non capisco come possa ritornare un valore simile. Le consiglio di verificare con una serie di printf che il cursore sia effettivamente posizionato al punto giusto e che il file sia della lunghezza giusta, altrimenti il conto non torna.

-- GianniCampanile - 11 May 2006

Re: Re: Delete

mi scuso, ma la mia domanda non è stata compresa. Se vi sono 4 record, il corrente è il 4. Poi si esegue una Delete. Il numero di record alla fine sarà 3. Il puntatore dove deve essere posizionato??? secondo me a fine file(anche se dai test sembra che deve posizionarsi al record 3). Ora è chiaro il topic???

-- MarcoLaVecchia - 11 May 2006

Re: possibile errore nei test della delete

E' un errore del commento. IN effetti il programma verifica che il record corrente sia il 4 (linea 514):
      if ((DBFInfo.NumRecs != 3) || (DBFInfo.CurrentRec != 4))
Il suo programma è corretto e dovrebbe superare il test.

-- GianniCampanile - 11 May 2006

ProvaTest4.dbf e Insert

Potrei sapere dove deve essere inserito il nuovo record quando la funzione di test passa come Where=Current?Faccio questa domanda perchè chiamando la funzione GetDBFInfo il CurrentRec è settato a 1 quindi il nuovo record dovrebbe essere inserito come primo ma ne ProvaTest4.dbf nn mi sembra così...infatti nn passo il test...potrebbe chiarire?grazie

-- AlessandroMarinelli - 11 May 2006

ERRORE IN UN COMMENTO DI TestM3.c

Il commento alla linea 539 del file TestM3.c è errato:

   // Se tutto OK i record sono 3 e il corrente e' il 3

deve essere

   // Se tutto OK i record sono 3 e il corrente e' il 4
E' errato solo il commento, il test viene effettuato correttamente.

-- GianniCampanile - 11 May 2006

Re: ProvaTest4?.dbf e Insert

Risoloto...scusate

-- AlessandroMarinelli - 11 May 2006

Re: Re: Re: Delete

Il fine file prima del troncamento è esattamente 38 byte in +, poi lo posiziono con fseek(MiaStruct.fp,0,SEEK_END) alla fine, quindi esattamente a fine file, riempio la struttura di nuovo per vedere dove mi calcola il record corrente, e mi continua ad uscir fuori questo CurrentRec = -2 !!!!! Volevo sapere : nella funzione da voi implementata, c'è qualche caso in cui CurrentRec può risultare negativo (ovviamente si) quale ?

-- GiuseppeDiFederico - 11 May 2006

Re: Re: Re: Delete
Viene effettuato un calcolo basato sulla posizione corrente del file pointer. I parametri che intervengono nel calcolo sono ovviamente anche la dimensione dell'header e quella del record. Se uno di questi parametri è errato il calcolo è errato. Questi parametri vengono riletti ogni volta dall'header, come da specifiche. Se la GetDBFInfo() non le ritorna errore allora verifichi bene questi parametri.

-- GianniCampanile - 11 May 2006

dati nel buffer

nel caso devo inserire un record in modalità TOP o CURRENT tutti i record successivi devono essere spostati. Dalle specifiche credo di aver capito che non si possono mettere tutti questi dati contemporaneamente in un buffer, ma a "blocchi". Ho capito bene?! smile

-- GiuseppeLisanti - 11 May 2006

Re: dati nel buffer

Si. A priori non si sa quanto è lungo il file, quindi non è consentito leggere tutto il file insieme in un buffer.

-- GianniCampanile - 11 May 2006

Re: Re: dati nel buffer
..quindi scrivo il nuovo record nel file e poi...uno alla volta i successivi in modo che il buffer ha le dimensioni di un record?

-- GiuseppeLisanti - 11 May 2006

ATTENZIONE Nuova versione di Modulo2.a

Nella pagina note è stata messa in linea una nuova versione di Modulo2.a. In questa versione la GetDBFInfo() ritorna alcune informazioni aggiuntive in caso di errore nel calcolo del record corrente. Chi ha utilizzato la libreria precedente e non ha di questi problemi non ha bisogno di scaricare e usare questa nuova versione.

-- GianniCampanile - 11 May 2006

Re: Re: dati nel buffer
Ma un SOLO record nel buffer si puo mettere???

-- LucaTartaglia - 11 May 2006

Problema con la GetDBFInfo insert

Professore io ho un problema nella lettura del record dal Prova.dbf...praticamente nn mi legge il carattere A inserito dalla funzione poke...mi spiego meglio...è come se invece di leggere il Prova.dbf leggesse il ProvaTest.dbf in cui il carattere A nn è stato inserito...è possibile?Ho provato a riaprire il file Prova.dbf e a leggere di nuovo il primo record e in quel caso funziona...possibile che nella vostra GetDBFInfo ci sia un errore?

-- AlessandroMarinelli - 11 May 2006

Re: Problema con la GetDBFInfo? insert

Ho provato a leggere tutto il dbf in memoria e poi a stamparlo carattere per carattere ma niente la "A" nn viene stampata...

-- AlessandroMarinelli - 11 May 2006

x il 64bit

C'è speranza che escano queste librerie ?

-- SimoneDiCola - 11 May 2006

Problema con GetDBFInfo

Salve, il mio problema é questo errore che non riesco a comprendere che si verifica nel file di test nel momento in cui viene richiamata la GetDBFInfo e non capisco se dipende dal mio codice o da qualcos'altro,anche perchè il fatto che non legga dal file dovrebbe implicare che io abbia in qualche modo troncato la lunghezza del file a una dimensione minore dell'header,cosa che non era proprio prevista nella funzione di inserimento e che quindi non ho fatto.Da cosa potrebbe dipendere?
Test:[30103] Peso:[10] - [INSERT: Funzionalita'(1)]
Ritorno della InsertBlankRecord TOP: [0]
Errore [-6] in [GetDBFInfo]-->[Errore di sistema [9] in lettura file []:[Bad file descriptor]]

-- ValerioMauro - 11 May 2006

Re: Problema con GetDBFInfo

Ok,risolto...

-- ValerioMauro - 11 May 2006

Re: Re: Re: Problema con la GetDBFInfo insert
A me è rimasto solo questo problema da risolvere...posso capire se è un mio problema ho un problema della vostra GetDBFInfo???Datemi almeno una risposta xfavore...

-- AlessandroMarinelli - 11 May 2006

Re: Re: Re: Problema con la GetDBFInfo? insert
Finalmente ho risolto...nn avevo messo la fflush prima della prima read...scusate

-- AlessandroMarinelli - 11 May 2006

Re: x il 64bit

le ho scritto sulla mail che ha indicato nel twiki: stiamo cercando di fare i test, ma per accelerare le cose dovrebbe venire alla mia lezione Martedì con la sua macchina, in modo da creare lì le librerie. La macchina deve essere in grado di leggere una penna USB o CD R/W.

-- GianniCampanile - 12 May 2006

creazione file errata

dopo tantissimi tentativi in cui la mia funzione InsertBlankRecord non superava il test che mette a confronto il file prova.dbf creato dalla poke e il provatest2.dbf, ho deciso di non far fare nulla alla mia funzione, e mi sono accorto che il file prova.dbf mi viene creato già di dimensioni 198 byte, come è possibile questo se dopo l'inserimento di un nuovo record deve essere di dimensione pari a 193 byte?

-- LucaDiFilippo - 12 May 2006

copia dei record

anche se penso che non sia possibile provo lo stesso a domandare, le specifiche dicono che non si può copiare tutto il file in memoria, ma nemmeno tutti i record?,quindi non copiando solo header e definizione di campi?

-- LucaDiFilippo - 12 May 2006

Re: creazione file errata

Il file Prova.dbf non viene "creato" ma viene copiato dal file ProvaTest1.dbf all'inizio del test (funzione Startup di TestM3.c). Forse non sta utilizzando una versione "pulita" dei files: provi a ricopiare tutti i dbf dal tar.gz iniziale.

-- GianniCampanile - 12 May 2006

Re: copia dei record

Ovviamente no. Se ci fossero 2 milioni di record, lunghi ognuno 1000 bytes non sarebbe possibile allocare un buffer di 2 miliardi di bytes.

-- GianniCampanile - 12 May 2006

(senza titolo)

BASTA MI SONO ROTTO SMETTETILA DI USARE IL MIO CONTATTO, TANTO SO CHI SEI SEI AL SECONDO ANNO DI INFORMATICA E NNN MI VA DI FARE IL TUO NOME SE NN LA SMETTI LO DOVRO FAR PRESENTE AL PROFESSORE

-- FrancescoPaturzo - 12 May 2006

Re: Re: creazione file errata
ho provato a copiare nuovamente i file dal tar.gz ma il risultato non è cambiato, il file ProvaTest1.dbf è giustamente di 155 byte, mentre il file Prova.dbf è di 198 byte

-- LucaDiFilippo - 12 May 2006

Problema nel test

Sto provando a fare i test della InsertRecord(), però nel momento in cui va a controllare se l'handle è valido, richiamando la IsDBFHandle(), mi dà il messaggio seguente: LPC_IsDBF.c: No such file or directory. Da che cosa dipende?

-- EmanueleGallo - 12 May 2006

Re: Re: Re: creazione file errata
Mi sembra impossibile, viene fatta solo una copia. Cancelli il file Prova.dbf e riprovi.

-- GianniCampanile - 12 May 2006

Re: Problema nel test

Dal fatto che sta usando il debugger e cerca il sorgente della funzione IsDBFHandle() che ovviamente lei non ha.


-- GianniCampanile - 12 May 2006

Re: Re: Problema nel test
Allora significa che non posso usare il debugger?

-- EmanueleGallo - 12 May 2006

Re: Re: Re: Creazione file errata
Il file Prova.dbf è 198 byte in quanto l'ultimo test effettuato è fatto su un file .dbf diverso da ProvaTest2.dbf.
Il test del prof dopo aver fatto la prima verifica va avanti coi test successivi e quindi modifica anche il file Prova.dbf


-- MassimilianoNatale - 12 May 2006

Re: Re: Problema nel test

Lo chiedevo perché ho bisogno del debugger. In ogni test che viene fatto sulla mia InsertDelete() mi ritorna sempre "Valore handle errato o Where non valido". Non riesco a capire perché a seguito del seguente confronto (che mi pare sia esatto) mi ritorna sempre lo stesso messaggio:
if((IsDBFHandle(handle)!=LPC_OK) || (info->fp==NULL) || ((Where!=TOP) || (Where!=BOTTOM) || (Where!=CURRENT)))
-- EmanueleGallo - 12 May 2006

Re: Re: Re: Problema nel test
Risolto smile

-- EmanueleGallo - 12 May 2006

Una domanda sulla ftruncate()

Volevo sapere come funziona di preciso la ftruncate(). Cioè la parte che viene eliminata, viene presa dalla fine del file?

-- EmanueleGallo - 12 May 2006

Test Misto

Prof, in una parte del test misto, voi ciclate la delete, e mandate un handle che ha come record corrente 4, e numRecs = 3 ... come dobbiamo comportarci in questo caso, perchè il programma mi sfarlocca (premetto tutti i test tranne questo me li supera con il massimo) leggendo le specifiche interne non sono riuscito a rispondere a questa domanda.

Grazie


-- GiuseppeDiFederico - 13 May 2006

LPC_DeleteRec.c

Ho problemi nel finire la Deleterec.. Il professore Campanile mi ha detto di non usare la truncate, ma la ftruncate, che però prende come parametro un file descriptor di tipo int.... In pratica non sò proprio cosa passargli visto che ho solamente il puntatore a file... ( e non mi va di crearmi il nome del file, aprirlo, prendermi il descriptor, richiuderlo, riaprirlo di nuovo e troncarlo....) Qualcuno mi puo aiutare?

-- BenothmanHassen - 13 May 2006

Domanda sull'Eof

Si può usare la funzione feof per testare la posizione di fine file oppure dobbiamo farlo attraverso opportuni calcoli?

-- ValerioMauro - 13 May 2006

ftruncate()

qualcuno può darmi il link di qualche guida online dove si parla della ftruncate()?? Nei miei libri non ho nessuna informazione su questa funzione frown

-- GiuseppeLisanti - 14 May 2006

Re: Domanda sull'Eof

feof va bene

Re: ftruncate

Tronca il file alla dimensione passata. se è più lungo lo accorcia, se è più corto lo allunga aggiungendo byte nulli.


-- AndreaSterbini - 14 May 2006

Usate le pagine del manuale!

Se volete sapere come funziona una funzione (ad esempio la ftruncate) basta scrivere

man ftruncate
-- AndreaSterbini - 14 May 2006

Re: File descriptor

Fai
man fileno
-- AndreaSterbini - 14 May 2006

GetDBFInfo

Errore [-7] in [GetDBFInfo]-->[Errore posizione su file, il puntatore non è all'inizio di un record: posizione [233] HeaderLen:[117] RecordLen[38]]

ecco questo qui è l'errore che restituisce.comincia a dar questo errore dal 3 test (umh..quello sulla insertblankrecord)

nn sò perkè mi fà così e chiedo se l'errore è del mio codice o del codice della GetDBFInfo


-- AntonioFaonio - 14 May 2006

Re: GetDBFInfo

L'errore mi sembra evidente: la GetDBFInfo non ha trovato il puntatore all'inizio di un record (233-117 = 116 che non è divisibile per 38), quindi non riesce a calcolare il numero di record.

-- GianniCampanile - 15 May 2006


Confronta file

Professore, ho un problema insuperabile, proprio alla fine del test misto infatti, quando mi manca l'ultimo controllo per passare tutto col 100 % mi fallisce l'ultimo ConfrontaFile(Prova.dbf, ProvaTest5.dbf) il mio risulta 2 record piu grande del suo, la domanda e': se il controllo precedente mi garantisce che il mio file ha il giusto numero di record e record corrente, come puo' essere diverso dal suo, secondo e + importante: Come faccio a trovare la causa, visto che il test misto fa 500 operazioni !!! Penso sia l'errore + difficile da trovare di tutto il programma, spero in qualche suo suggerimento chiarificatore...

-- GiuseppeDiFederico - 15 May 2006

Re: Confronta file

Il test Misto svuota il file e lo ricostruisce man mano fino a farlo uguale al ProvaTest5.dbf. Non e' detto quindi che se il test precedente funziona allora anche il Misto funzioni. Le consiglio di seguire passo passo il test, modificando il file (inserendo printf, gets e GetDBFInfo()) in modo che dopo ogni operazione possa verificare che il file, il numero di record e il record corrente siano effettivamente corretti.

-- GianniCampanile - 15 May 2006

Record corrente

Volevo sapere dove va memorizado il record corrente?! es se Num > NumRec allora mi posiziono a finefile e meto CurentRec a CurentRec + 1 e ritorno LPC_BAD_ARG. come facio a conservare il valore del CurentRec?! Grazie

-- DenisDrijaj - 15 May 2006

Confronto file TEST MISTO

anche io ho un problema con il testo misto: in pratica supero tutti i test tranne l'ultimo confronto con il ProvaTest5.dbf. Confrontando "a mano" i due file vedo che sono identici tranne che nel Prova.dbf manca in carattere 'A'. Ho perso per strada qualche fflush()???


-- GiuseppeLisanti - 15 May 2006

Re: Confronto file TEST MISTO

Probabile.

-- GianniCampanile - 15 May 2006

truncate o ftruncate

Salve, vorrei un chiarimento su quale utilizzare tra truncate e ftruncate. Nelle specifiche viene esplicitato l'uso di truncate, mentre nel forum si parla della ftruncate...Quale delle due? Grazie

-- PaoloParlapiano - 15 May 2006

Records Seguenti

Una cosa proprio non mi è chiara: Supponendo che ho un DBF con i primi due campi che sono char di lunghezza 8, e due logical. Supponendo che venga chiamata due volte la funzione di inserimento del record vuoto con Where==TOP. La prima volta, se non ho capito male la funizone riempie 8 byte di NULL, ma alla seconda che succede? Viene il primo record viene "trasformato" in logical e spostato in avanti ed il primo record di nuovo riempito di NULL, oppure soltanto il primo record viene riempito di NULL?? Spero sia chiara la domanda big grin

-- SergueiCharounine - 15 May 2006

fflush

mi scusi professore ma è obbligatorio usare fflush?? io non l'ho usato ed il test dà 100% su tutti i test...vado contro le specifiche nn usandolo oppure quello sulle specifiche era solo un consiglio??

-- MatteoSignorini - 15 May 2006

Re: truncate o ftruncate

truncate() era un errore nelle specifiche, non è corretto troncare un file aperto ed è errato chiuderlo. Usare la ftruncate().

-- GianniCampanile - 16 May 2006

Re: Records Seguenti

Sta confondendo Record con Campo, e siamo al Modulo 3!!

-- GianniCampanile - 16 May 2006

Re: fflush

Il flush dei dati viene effettuato anche in seguito ad una fseek() quindi può darsi che il suo programma funzioni senza bisogno di una fflush(). L'uso della fflush() non e' obbligatorio. Attenzione però che se sta lavorando su un sistema Windows, il buffering è diverso.

-- GianniCampanile - 16 May 2006

LIBRERIE 64 bit

Sono state messe in linea le librerie del Modulo1 e Modulo2 a 64 bit. Possono essere utilizzate anche da macchine a 32 bit.


-- GianniCampanile - 16 May 2006

Uso del flush prima della GetDBFInfo

Se noi chiamiamo la GetDBFInfo,tenendo conto che legge info dal DBF dobbiamo fare il flush prima di invocarla o ci pensa dasola?

-- AlessandroCasciaro - 16 May 2006

Re: Uso del flush prima della GetDBFInfo

Se mettete i flush dopo le vostre write e prima delle vostre read tutto funziona.

-- GianniCampanile - 16 May 2006

Costanti e aderenza alle specifiche

Salve, vorrei avere un chiarimento per quanto riguarda l'aderenza alle specifiche: quando controlliamo i valori di ritorno delle funzioni ANSI e/o POSIX, possiamo inserire ad esempio if(fseek(bla bla)!=0) bla bla; oppure dobbiamo scrivere if(fseek(bla bla)!=LPC_OK) approfittando di tale costante anche in questi casi? Grazie

-- PaoloParlapiano - 16 May 2006

Re: Costanti e aderenza alle specifiche

In quel caso sarebbe un errore utilizzare LPC_OK. Se in un futuro qualcuno cambiasse il valore di LPC_OK il programma non funzionerebbe piu', quindi dovete immaginare di non conoscere il valore della costante. Alcuni esempi di errori:

// Uso di un numero al posto di una costante
if (FieldInfo.FieldType == 2)....

// Uso di una costante come numero ordinato
if (FieldType > LOGICAL) ...

// Come sopra
for (i = FALSE; i < .....

// Come sopra
if (GetDBFInfo(...) < LPC_OK)

// Uso di una costante fuori contesto
if (fseek(...) != LPC_OK)


-- GianniCampanile - 16 May 2006

confrontare i .dbf

se volgiamo confrontare il layout del un prova.dbf dopo l'inserimetno con qualle dobbiamo confrontarlo per vedere in cosa abbiamo sbagliato?

-- AlessandroCasciaro - 16 May 2006

Altre due domande sulle specifiche

Intanto grazie per la precedente risposta. La prima domanda che vorrei fare è: è indispensabile che anche le funzioni ausiliarie nell'LPC_Common.c siano in ogni caso provviste di valori di ritorno per segnalazioni di errore nonostante le precondizioni siano ovviamente rispettate da me che le utilizzo? Seconda domanda: cosa si intende di preciso per "corretto utilizzo" della funzione Err? E' ristretto alla correttezza dei parametri passati nella generazione degli errori o ha anche un qualche significato "logico" del suo utilizzo? Grazie

-- PaoloParlapiano - 16 May 2006

Re: Re: Costanti e aderenza alle specifiche
è giusto però dopo una chiamata alla GetDBFInfo oppure alla ISDBFHandle controllare eventuali errori scrivendo:

ret=GetDBFInfo(handle,&DBFInfo);
if (ret!=LPC_OK) return ....


infatti quelle funzioni tornano proprio LPC_OK se tutto va bene...
-- MatteoNati - 16 May 2006

Re: Re: Re: Costanti e aderenza alle specifiche
inoltre:

1) vanno gestiti eventuali errori (ammessi che possano averne) di funzioni come ftell,fileno,ftruncate?

2) è giusto ritornare LPC_ERR_READ se fallisce la GetDBFInfo?

grazie mille


-- MatteoNati - 16 May 2006

Re: Altre due domande sulle specifiche

Se una funzione "interna" incontra un errore lo deve intercettare e stampare tramite la funzione di errore. Le uniche eccezioni sono funzioni che servono proprio a trovare quell'errore, come ad esempio la IsDBFHandle. Se ad esempio avete una funzione interna che si chiama FindFieldName() per trovare il nome di un campo in un vettore, questa funzione potrà ritornare la posizione del campo nel vettore oppure (ad.esempio) -1 se non lo trova. In questo caso non ha senso invocare l'errore. Analogamente è eccessivo controllare i parametri di input delle funzioni "interne" che ricevono tali parametri da altre vostre funzioni. Corretto utilizzo non è solo chiamral con i parametri giusti, ma secondo gli esempi dati nelle specifiche della funzione stessa.

-- GianniCampanile - 17 May 2006

Re: Re: Re: Costanti e aderenza alle specifiche
1) Tutte le funzioni vanno verificate, soprattutto quelle di sistema. 2) Per l'uso dell'errore nelle chiamate ad altre funzioni vedete le specifiche della funzione di errore

Ovviamente testare = LPC_OK sul ritorno della funzione GetDBFInfo() è corretto.


-- GianniCampanile - 17 May 2006

Errore nella chiamata a GetDBFInfo()

Anche a me dà il seguente errore:
Errore [-7] in [GetDBFInfo]-->[Errore di sistema [2] in spostamento su file [No such file or directory]]
Da cosa può dipendere?

-- MassimilianoNatale - 17 May 2006

Gestione errori

Quali sono gli errori da tornare con la LPC_GestioneErrore() per le funzioni fflush(),ftruncate() e fileno()?

-- FerdinandoAlessi - 17 May 2006

Re: Gestione errori

Secondo me: con fflush e ftruncate un LPC_ERR_WRITE e con fileno un LPC_BAD_ARG. Nella print dell'errore va riportato l'errno, come indicato nelle specifiche. Nessuno vi impedisce di definire errori vostri, ad es. LPC_ERR_FLUSH se volete gestire piu' puntualmente un certo errore.

-- GianniCampanile - 17 May 2006

domanda su gotorecord()

nelle specifiche di interfaccia si dice ke: Il parametro Mode indica la modalità di spostamento e può valere:

* ABSOLUTE o lo spostamento è assoluto. Se Num e' <= 1 si viene posizionati al primo record.....

* RELATIVE lo spostamento è relativo al record corrente. In questo caso Num viene sommato al numero del record corrente e se il risultato è: o <=0 Si torna al primo record e il record corrente vale 1...

la mia domanda è: non dovrebbero essere tutti e due <=1 per settare il record corrente al primo record?? perchè a 1 è<=0 e all'altro <=1??


-- StefanoLAVAGNO - 17 May 2006

Re: domanda su gotorecord()

Non e' che cambi molto, dato che in entrambi i casi se il risultato e' 1 si va al primo record. Il secondo caso e' trattato in piu' parti, quindi viene distinto il caso <= 0 e >0 (quindi anche 1). Comunque il concetto e' che il minimo e' il record 1.

-- GianniCampanile - 17 May 2006

gestione errore ftell

è giusto ritornare LPC_ERR_READ dopo un eventuale errore della ftell?

-- MatteoNati - 17 May 2006

Ftruncate ed errori

Salve, la funzione ftruncate mi torna errore in specifico mi dice che fp non è il file pointer valido, ma io il file pointer lo prendo dalla DBF_Info...che fare???? Grazi Grazie!

-- Users.691942 - 17 May 2006

Test...Info

Salve professore, vorrei avere un informazione sui test, dato che i test sono sequenziali se io per caso sono implementassi solo le funzioni: goto e delete, e non la insert, lei le testerà con il db file già pieno dei 4 record?? Cioè le funzioni singolarmente?

Grazie!


-- Users.691942 - 17 May 2006

Re: gestione errore ftell

Si

-- GianniCampanile - 17 May 2006

Re: Ftruncate ed errori

Leggere bene le spcifiche della funzione e i vari topic.

-- GianniCampanile - 17 May 2006

Re: Test...Info

No, implementi prima la Insert e poi le altre. Non sono state fatte prove di esecuzione partendo da funzioni intermedie.

-- GianniCampanile - 17 May 2006

Re: Test...Info

La ringrazio è quello che sto facendo, ma mi chiedo se disgraziatamente la mia insert non funzionasse bene, in pratica butterei il lavor su tutte le altre funzioni.....spero intanto che la mia insert funzioni bene ma in caso spero che ci siano test intermedi!!

Grazie!


-- Users.691942 - 17 May 2006

aderenza alle specifiche:

è corretta una cosa del genere??
esito_write=fwrite(&num_rec,sizeof(long),1,dbf);   
if(esito_write!=1) {.....

-- GiuseppeLisanti - 17 May 2006

Re: aderenza alle specifiche

Si.

-- GianniCampanile - 18 May 2006

include di ftruncate()

gentile professore, nel man di linux alla voce ftruncate vengono elencati negli include unistd.h e sys/types.h ma lei nelle specifiche dice esplicitamente che non vuole path assoluti.Onde evitare warning con il suo compilatore vorrei sapere se includere o meno types.h.

-- TullioSebastiani - 18 May 2006

Re: include di ftruncate()

sys/types.h non E' un path assoluto. Per i file di include del progetto non sono ammessi neanche path relativi (ad es. ../!LPC_Include.h) ma per le funzioni ANSI e POSIX si.

-- GianniCampanile - 18 May 2006

Funzione GetDBFInfo()

E' possibile che l'errore di sistema nel test misto sia dovuto alla funzione GetDBFInfo() ?
Nel test misto viene chiamata 3 volte dal mio programma e solo la terza volta fallisce (tornandomi l'errore)
[GetDBFInfo]-->[Errore di sistema [2] in spostamento su file [No such file or directory]]
Inoltre non avendo il codice della funzione non posso nemmeno usare il debug ne risulta che non so proprio da dove iniziare per risolverlo

-- MassimilianoNatale - 18 May 2006

Re: Funzione GetDBFInfo()

Un errore del genere vuol dire che il file pointer non è più valido. Probabilmente c'è uno sfondamento di memoria. Ricontrolli tutte le allocazioni e memorizzazioni e, se non lo fa già, utilizzi la libreria efence.

-- GianniCampanile - 18 May 2006

Ambiente di Sviluppo OS 'FEDORA' RedHat

Mi scusi professore, saprebbe suggerirmi qualche ambiente di sviluppo "C" da scaricare gratuitamente per Linux? (Fedora). La ringrazio per l'attenzione.

-- GiovanniLucaSorrentino - 18 May 2006

Libreria 'Electric Fence'

Ho scaricato ed installato la libreria efence.
Quando provo ad usarla seguendo le indicazioni date su Twiki ricevo i seguenti messaggi di errore:

ERROR: ld.so: object 'libefence.so.0.0' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object 'libefence.so.0.0' from LD_PRELOAD cannot be preloaded: ignored.

A cosa sono dovuti?


-- MassimilianoNatale - 19 May 2006

LPC_ERR_EOF

Non e' molto chiaro se quando torniamo LPC_ERR_EOF e' da considerare un caso particolare della funzione o un errore vero e proprio. Ad esempio nella GotoRecord(), se andiamo a finire su EOF, oltre a tornare LPC_ERR_EOF dobbiamo chiamare LPC_GestioneErrore()? Non puo' essere che l'utente vuole deliberatamente posizionarsi su EOF?

-- AlessandroAgostini - 20 May 2006

Consegna..

Consegniamo solo i 3 file + LPC_Common.c e il readme.txt?

-- AlessandroMarinelli - 20 May 2006

Re: Consegna..

e LPC_M3_Include...ok?

-- AlessandroMarinelli - 20 May 2006

Confronto file

Io avrei una domanda ma se io facio una insert sul file alloramodifico sull header il timestamp. allora la mia domanda è il confronta file controla anche i timestamp?Grazie

-- DenisDrijaj - 21 May 2006

Record separati da NULL

Io mi ricordo che nelle specifiche, o anche oralmente, era stato detto che per calcolare la lunghezza del record si utilizza la somma dei bytes occupati da ogni campo. Nei file che ci date come prova questa è di 38 bytes. Mi ricordo anche che si era detto che i record tra loro erano separati da 2 NULL, mentre invece nei vostri files questi non vi sono. Per cui, per esempio, nel test 30103, l'if del Poke me lo passa, l'if del return di InsertBlankRecord me lo passa, la GetDBFInfo la fa senza problemi e i valori letti sono corretti, ma non passa il controllo ConfrontaFiles perchè io ho calcolato i 2 NULL tra i record, mentre nel file da confrontare non vi sono.

Per cui per passare il test non devo mettere i NULL, ma solo i record uno appresso all'altro, ma le specifiche mi sembra dicessero il contrario. Per cortesia mi corregga se sbaglio (dal momento di questo post sto correggendo questo mio errore facendo in modo che non vengano scritti e/o considerati i 2 NULL nelle mie funzioni).


-- DanieleSchirmo - 21 May 2006

Sequenzialità dei tests

Ho notato che, a differenza dei moduli precedenti, il test 5 non si limita ad eseguire sequenzialmente i tests da 1 a 4, ma prima esegue una 'pulizia' del DBF relativo a handle (che dovrebbe essere Prova.dbf). Questo mi comporta che se lancio anche più volte di seguito il test 5 ottengo sempre 100, ma se dopo aver lanciato una o più volte il test 5 (o dopo aver lanciato una volta i test da 1 a 4), lancio il test 1, questi anzichè 36 mi dà come risultato 6 (e in maniera simile si comportano i seguenti test lanciati sequenzialmente dopo il primo).

Ora, a me questo comportamento sembra normale in quanto il test 1 (e il 2,3 e 4) non fanno quella 'pulizia' iniziale che fa il test 5, pertanto è normale che falliscano dopo il lancio del test 5 (o dopo il lancio dei test da 1 a 4), ma per essere sicuro chiedo a lei la conferma di questa mia ipotesi.

Grazie mille.

// Devo ripulire prima di ricominciare
handle = Startup(handle, 1);
if (handle < 0)
{
   printf("TEST: Errore apertura database:[%d]\n", handle);
   printf("Exiting....\n");
   return(-1);
}
-- DanieleSchirmo - 21 May 2006

Ritorno della ftruncate()

Salve professore, volevo chiederle nel caso in cui fallisca la ftruncate() che codice di errore dobbiamo ritornare? e quale altre operazioni dovremmo eseguire?solamente ritornare errore e fare le free() ? Grazie.

-- AlessioDezi - 21 May 2006

Re: Confronto file

No, non controlla il timestamp, infatti se ci fai caso sul file di test li azzerano in tutti e 2 i files


-- GiuseppeDiFederico - 21 May 2006

VALGRIND

gentili professori, preciso che il mio modulo funziona. sto facendo i test con Valgrind. Non è che potreste mettere il log di valgrind del vostro modulo 3??? a me sembra che tutto va bene(non mi scrive malfunzionamenti) ma alla fine mi rileva degli errori che non sono specificati bene... vorrei sapere insomma quale deve essere un log corretto

-- MarcoLaVecchia - 21 May 2006

Problema di permessi

Provando a ricompilare su un altro sistema il modulo che ho consegnato ho visto che dà alcuni problemi di permessi su determinati file (penso perchè alcune volte sbadatamente mi sono ritrovato a lavorare da root). E' un problema irrilevante o devo riconsegnare il modulo dopo aver impostato i giusti permessi?

-- MassimilianoNatale - 22 May 2006

Re: Consegna

Si, potete consegnare solo i sorgenti (.c e .h) e il readme.

-- GianniCampanile - 22 May 2006

Re: Record separati da NULL

Perché invece di andare a memoria non rilegge le specifiche ?

-- GianniCampanile - 22 May 2006

Re: Sequenzialità dei tests

I test sono sequenziali, lanciare l'1 dopo il 5 non è deto che funzioni, non è stato testato anche perché noi li lanceremo in modo sequenziale, senza "salti".

-- GianniCampanile - 22 May 2006

Re: Ritorno della ftruncate()

Io direi un errore LPC_ERR_WRITE, oppure potete creare un LPC_ERR_TRUNCATE (nel file LPC_M3_Include.h). Quello da fare dipende da quello che avete fatto: sicuramente dovete liberare tutto quanto è stato allocato, ma non vi è richiesto di cancellare il file (che a quel punto è inutilizzabile) o altro. In generale cercate di ripristinare la situazione all'ingresso nella funzione per quanto potete.

-- GianniCampanile - 22 May 2006

Re: Problema di permessi

Non dovrebbe essere un problema sui files .dbf, perché useremo i nostri (NON dovete consegnarli). Per quanto riguarda i sorgenti e' comunque meglio non lasciarli come owner root.

-- GianniCampanile - 22 May 2006

Per il prof Sterbini...

è possibile discutere il progetto prima della fine di giugno?

-- AlessandroMarinelli - 22 May 2006

Ancora sulla consegna

Quindi se ho ben capito bisogna consegnare il modulo in formato .zip (come è successo per i moduli precedenti) mantenendo la struttura della directory Modulo3 ma privandola dei file non richiesti (quindi inseriremo solo il readme e i vari sorgenti nella giusta locazione). (?)

-- MassimilianoNatale - 23 May 2006

librerie power pc

salve, e' possibile avere le librerie dei primi due moduli compilate per l'architettura power pc per svolgervi delle prove?

-- GianlucaPari - 23 May 2006

Testing su varie piattaforme

Scusate, ma mi trovo in difficoltà su questa questione del "risultato PEGGIORE su varie piattaforme". Io tengo solo Debian sul PC, e non conosco nessuno che abbia un Mac; come faccio a testare il mio progetto su altre piattaforme?

Non è un po' estremo considerare il PEGGIORE tra i risultati su tutte le piattaforme? Anche ammesso che io riesca a provare il mio programma su altri computer e sistemi operativi, non avrò certo la possibilità di lavorarci! Non possiedo tanti computer diversi.

Grazie in anticipo.

P.S.: Per il prof.Sterbini: è possibile avere una risposta alla domanda che ho fatto per email sulla Gara di Programmazione? Grazie.


-- AlessandroPiva - 23 May 2006

Record corrente

Per riposizionarsi sul record corrente (in caso ce ne fosse bisogno) è indifferente usare la ftell e salvarsi la posizione dopo aver chiamato la GetDBFInfo, per poi ripristinarla alla fine delle operazioni, oppure ricalcolarsi l'offset utilizzando il valore di record corrente letto dalla GetDBFInfo? (io utilizzo questo secondo metodo) Nelle specifiche non è chiaramente detto, per cui penso vada bene ogni metodo, ma ieri a lezione il prof mi ha fatto sorgere il dubbio. Grazie.

-- DanieleSchirmo - 24 May 2006

Re: Testing su varie piattaforme

Considerare il "peggiore" tra i risultati vuol dire che il programma "al minimo" ha quei problemi, che in altri compilatori possono non essere evidenziati, ma che ci sono. Il punto non è di testare il programma su tutti i sistemi possibili, ma di fare attenzione nello sviluppare, di alzare il livello di warning al massimo, di fare più test possibili e, possibilmente di testare il programma su almeno 2-3 sistemi. A questo scopo c'è, ad esempio, il laboratorio di Via Salaria.

-- GianniCampanile - 24 May 2006

Re: Record corrente

Vanno bene tutti i modi, anche quello di utilizzare fgetpos/fsetpos. Se deve richiamare appositamente la GetDBFInfo() è sicuramente più oneroso, se possibile andrebbe evitato, ma non è un errore.

-- GianniCampanile - 24 May 2006

errore test misto

Ho un caso stranissimo quando vado a dare il testo misto. I primi tre test , vanno alla grande, quando invece eseguo il misto ottengo quest o errore sulla mia macchina (una suse 10.1 RC3) : Errore di virgola mobile

mentre su una fedora 5 appare come errore: homker..... Ma cosa vuol dire???? come può esser e errore in virgola mobile se lavoro solo su interi??? e che erore è homker????

Grazie

Andrea


-- AndreaPecchi - 24 May 2006

Consegna

Ho consegnato l'intera cartella Modulo3. Ho notato però le dopo la compressione tutte le cartelle vuote vengono concellate (dunque mancano le cartelle obj e lib in assenza delle quali la compilazione fallisce). Va bene ugualmente?

-- MassimilianoNatale - 24 May 2006

Re: Re: Record corrente
Io intendevo che il metodo che ho utilizzato consiste, una volta usata la GetDBFInfo per avere le oppurtune info sul file, nell'utilizzare il valore di record corrente letto dalla GetDBFInfo per ricalcolarmi l'offset (invece magari di salvarmi la posizione corrente subito dopo aver utilizzato la GetDBFInfo e poi ripristinarla in un secondo momento). Credo che i due metodi siano pressochè equivalenti, ma il dubbio mi era sorto solo dopo averne parlato a lezione.

In ogni caso non richiamo la GetDBFInfo, ma la uso solo una volta all'inizio di ogni funzione e poi mi limito ad utilizzare i dati letti.


-- DanieleSchirmo - 24 May 2006

Compilazione su Mac OS X

La compilazione su OS X necessita di particolari librerie o è del tutto uguale alla compilazione su Linux?
Testando il mio modulo sul Mac ho ricevuto degli errori relativi ai file .a che ci avete fornito (l'errore diceva che le librerie contengono delle tabelle vuote e di utilizzare ranlib)

-- MassimilianoNatale - 25 May 2006

Re: Consegna

Bastano i sorgenti (.c e .h) e il readme.txt.

-- GianniCampanile - 25 May 2006

Re: Re: Re: Record corrente
Va bene.

-- GianniCampanile - 25 May 2006

Re: Compilazione su Mac OS X

Mac OS X non è Linux, quindi i compilati (.o e .a) non possono essere utilizzati.

-- GianniCampanile - 25 May 2006

Dimensione File

x calcolare la dimensione del file dobbiamo calcolarlo noi sapendo grandezza header, lunghezza record e numero dei record oppure possiamo usare funzioni esterne come ad esempio la stat???

-- LucaMargiani - 26 May 2006

Re: Dimensione File

Si possono usare funzioni esterne (in caso la fstat()) ma, non essendo ANSI, sarebbe meglio calcolare la lunghezza.

-- GianniCampanile - 29 May 2006

come usare ftruncate ...

per usare ftruncate devi fare cosi:

ftruncate(fileno(DBFInfo.fp), size) ...


-- GabrieleGristina - 27 May 2006

COMPILAZIONE Modulo 3 in assenza Modulo 2

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 utilizzate appartenenti al modulo due delle quali naturalmente non ho i sorgenti.. Da che dipende? Credevo fosse suficiente copiare la libreria modulo2.a fornita dai professori..qualcuno mi può aiutare? Grazie ciao

-- LuigiRotili - 27 May 2006

Dubbi su test multipiattaforma

Con i 64bit c'e' scritto di utilizzare i tipi come my_long ridefiniti nell'include fornito dai professori, ma nel file di test, nella funzione di azzeramento del timestamp, vengono usati i tipi normali (long ..). Qundi se io vado a compilare su un 64bit usando i tipi ridefiniti, il programma di test non legge nello stesso punto dove io ho modificato, e da errore nel confronto del file. Sto sbagliando ? Devo usare i tipi ridefiniti e modificare il file di test o uso i tipi normali?

-- MarcoSciatta - 27 May 2006

Re: Dubbi su test multipiattaforma

Quello che dice e' corretto. C'è un file di test specifico per i 64 bit, nel quale i riferimenti sono al tipo my_long.

-- GianniCampanile - 29 May 2006

Vari test e ritorno getDBF

come è possibile che ho 100 % a tutti i test 0% a quelllo misto e 87% alla valutazione finale. Poi c'à uno strano errore nel test misto : Errore [-7] in [GetDBFInfo]-->[Errore di sistema [2] in spostamento su file [No such file or directory]] sarebbe?

-- AlessandroCasciaro - 27 May 2006

Re: Vari test e ritorno getDBF

Utilizzi la versione aggiornata della libreria Modulo2.a che ha nella GetDBFInfo() una stampa piu' dettagliata degli errori, il suo potrebbe essere un errore di posizionamento su file.

-- GianniCampanile - 29 May 2006

funzione feof

Non riesco a far funzionare la feof, cioè non ostante il puntatore sia a fine file la foef non ritorna errore,c'ho messo una fgetc per far sfondare la memoria e a quel punto mi dava errore, ma poi si ripercuoteva anche sul test misto dicendo che la GetDBFinfo non trovava il file, o anche cercato sulla rette ma niente.Quindi vorrei sapere se bisong ausare qualche accorgimento prima di adoperare la feof

-- AlessandroCasciaro - 27 May 2006

Memoria o oggetti non liberati all'uscita o su errore (peso 5)

Salve, vorrei un chiarimento su questa voce tra le specifiche da rispettare. Cosa si intende per "oggetti" non liberati? Ci si riferisce sempre a variabili, strutture o vettori allocati dinamicamente o si intende qualcos'altro? Grazie

-- PaoloParlapiano - 27 May 2006

Re: Memoria o oggetti non liberati all'uscita o su errore (peso 5)

No, variabili (di qualunque tipo) allocate e non liberate.

-- GianniCampanile - 29 May 2006

Ritorno di LPC_ERR_EOF

quando ritorniamo LPC_ERR_EOF nella delet come nella goto dobbiamo generea un errore o semplicemente tornare LCP_ERR_EOF ?

-- AlessandroCasciaro - 29 May 2006

Re: chiarimento sulla delete record

Salve, io ho un problema, secondo i vostri test la delete record dovrebbe lasciare il current rec a 3, a me rimane a 4 in ogni caso e non capisco per qualche motivo; morale della storia: il test misto fallisce perche nel secondo record apposto di una A c'è una B. Qualcuno di voi ha avuto lo stesso problema? Inoltre, c'è qualcuno che ha preso 100? Grazie

-- GabrieleGristina - 29 May 2006

Quale file consegnare 32 o 64?

Nella consegna quindi, dobbiamo consegnare il file con i tipi my_long .. ridefiniti o quello con i tipi normali per macchine a 32 bit?


-- MarcoSciatta - 29 May 2006

Chiarimento sull'uso delle costanti

Salve, vorrei sapere se è lecito scrivere (DBF_FIXED_HEADER_LEN + (risultato parte variabile header) + 2) o se il '2' dei due NULL finali deve essere inserito come una costante definita nel nostro LPC_M3_Include.h. Grazie

-- PaoloParlapiano - 29 May 2006

Re: Ritorno di LPC_ERR_EOF

Generare errore.

-- GianniCampanile - 30 May 2006

Re: Quale file consegnare 32 o 64?

E' indifferente, perché il tipo my_long corrisponde sul 32 bit al tipo long. Per evitare problemi indichi chiaramente nel readme.txt che ha sviluppato per un sistema a 64 bit.

-- GianniCampanile - 30 May 2006

Re: Chiarimento sull'uso delle costanti

Va bene anche 2.

-- GianniCampanile - 30 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 - 03 May 2006

Edit | Attach | Watch | Print version | History: r218 < r217 < r216 < r215 < r214 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r218 - 2006-05-30 - GianniCampanile






 
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