Per dubbi, consigli o richieste, potete mandare un'e-mail ad Andrea Carolfi.
Ringraziamo Amiga Transactor Mailing List per questo tangibile contributo!
Bisogna ricordare, che il tipo del puntatore alla struttura che descrive un file, sotto AmigaDOS è un BPTR (e non come potrebbe pensare qualcuno FILE *), ovvero una longword. Perchè essendo un tempo programmato in BCPL, tutti i puntatori dovevano essere lw. Vediamo dunque le procedure/funzioni che vedremo in questa puntata:
Il primo blocco, sono funzioni non bufferizzate, il secondo blocco, sono
funzioni bufferizzate.
Una volta aperto un file, possiamo leggerlo con la Read, scriverlo
con la Write e chiuderlo con la Close. Possiamo anche utilizzare
le procedure bufferizzate, a seconda dei nostri scopi. #include
Se invece della Read e della Write, avessi usato la FRead
e la FWrite, avrei ottenuto una versione bufferizzata del programma.
Non ci vuole molto a cambiare la struttura del programma, per usare le varie
funzioni di lettura/scrittura al posto di Read e Write. La funzione Seek, è molto utile con i file di record, per
saltare ad un determinato record ed eseguire quindi un accesso non sequenziale
al file. [...] Seek(file,sizeof(struct Mia) * 4,OFFSET_BEGINNING);Ovviamente, 4 e non 5 perchè con il valore zero si torna all'inizio del file. Il terzo parametro può assumere i seguenti valori (come la fseek di unix):
In questo modo possiamo saltare al terz'ultimo record di un file, oppure
saltare ai prossimi cinque record, ai tre precedenti o altro, specificando
anche valori negativi (che fanno tornare indietro il puntatore alla
posizione). Le funzioni Input, Output, SelectInput e SelectOutput, servono le prime due per ricevere il puntatore al file di standard input e standard output e le seconde due per impostarli su file di nostro interesse. Per esempio, se nel nostro programma, avessimo chiamato: [...] BPTR old_fh; [...] old_fh = SelectOutput(file); [...] SelectOutput(old_fh); [...] avremmo rediretto l'output del nostro programma sul file RAM:temp. Una cosa del genere, può essere utile per creare file di log, per esempio. Le funzioni DeleteFile e Rename servono per cancellare un file od una directory (a patto che sia vuota) e per rinominare un file od una directory. Le funzioni Lock e la sua corrispettiva UnLock, servono per bloccare e sbloccare l'accesso ad altri processi ad un file che stiamo manipolando. Le modalità accettate dalla Lock sono:
La funzione DupLock, serve per ottenere una copia di un lock (solo quelli condivisi). Può essere utile in un sistema di produttori/consumatori. La funzione Info, molto semplicemente restituisce una struttura /* returned by Info(), must be on a 4 byte boundary */ struct InfoData { LONG id_NumSoftErrors; /* number of soft errors on disk */ LONG id_UnitNumber; /* Which unit disk is (was) mounted on */ LONG id_DiskState; /* See defines below */ LONG id_NumBlocks; /* Number of blocks on disk */ LONG id_NumBlocksUsed; /* Number of block in use */ LONG id_BytesPerBlock; LONG id_DiskType; /* Disk Type code */ BPTR id_VolumeNode; /* BCPL pointer to volume node */ LONG id_InUse; /* Flag, zero if not in use */ }; /* InfoData */riempita con i valori del dispositivo che contiene il file passatole (il BPTR). La funzione CreateDir serve per creare un cassetto. Le funzioni CurrentDir e ParentDir, servono per ottenere la directory contenente il lock passato o il cassetto genitore. Bene, nell'ottava puntata vedremo altre procedure della dos.library e nella nona, cominceremo a vedere intuition. Ovviamente, se avete qualcosa da chiedermi, sono a vostra disposizione.
|
![]() |
![]() |