![]() |
Mòdul
8
![]() |
Fonaments de
Programació. Llenguatge C/C++![]() |
Pràctica ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
Pràctica
d'ampliació ![]() ![]() |
Escriptura i lectura de registres en disc
En aquesta pràctica aprendrem a llegir i escriure blocs sencers de dades, especialment estructures, amb les funcions fread() i fwrite().
|
|||||
![]() |
Desenvolupament de la pràctica
La llibreria estàndard d'entrades i sortides de C proporciona dues funcions que permeten llegir i escriure blocs sencers de dades. Aquestes funcions són fread() i fwrite() i tenen els següents protocols: int fread(void *punter, int grandaria_del_element , int nombre_de_elements, FILE *arxiu) int fwrite(void *punter, int grandaria_del_element , int nombre_de_elements, FILE *arxiu) Aquestes funcions són especialment interessants per emmagatzemar o recuperar estructures senceres i no camp per camp. En aquesta pràctica presentarem dos programes, el primer dels quals permetrà emmagatzemar en un arxiu de disc registres d'una base de dades d'alumnes i notes. L'accés a l'arxiu es farà de registre en registre i no de camp en camp. Els valors dels diferents camps s'introduiran per teclat. Per finalitzar, l'entrada de dades s'haurà d'introduir el valor -1 en el camp codi. El segon dels programes permetrà llegir registres d'un arxiu i els mostrarà per pantalla. De la mateixa forma que el primer programa, l'accés a l'arxiu es farà de registre en registre. Definiu un projecte nou anomenat m8p081 i afegiu-li un arxiu de font C/C++ anomenat m8p081.cpp. Escriviu el següent codi:
Explicació del programa Els registres que emmagatzemarem seran estructures del tipus fitxa definida com a estructura global. Es defineix una variable d'aquesta estructura anomenada alumne. Aquesta variable ens servirà de buffer per escriure tot el registre de cop a l'arxiu. Per tal de finalitzar l'entrada de dades s'ha posat una comprovació darrere de l'entrada del camp codi. Si el valor introduït és igual a -1, se surt del bucle, es tanca l'arxiu i acaba el programa. Una vegada introduïts els quatre camps del registre s'emmagatzema de cop a l'arxiu amb la funció fwrite():
Aquesta línia es poden llegir com: escriu a l'arxiu apuntat per la variable fp, 1 bloc de 48 octets (sizeof(alumne)=48) començant per l'adreça de memòria apuntada pel punter alumne. El següent programa mostra com es pot llegir els registres sencers de l'arxiu creat amb el programa anterior. Definiu un projecte nou anomenat m8p082 i afegiu-li un arxiu de font C/C++ anomenat m8p082.cpp. Escriviu el següent codi:
Explicació del programa Aquest programa és realment similar a l'anterior. L'única diferència és que en aquest cas el bucle s'executa fins que es trobi el final de l'arxiu (!feof(fp)) i la lectura de dades del disc es fa amb la funció fread() de la següent forma:
Aquest línia pot llegir-se com: llegeix a l'arxiu apuntat per fp 1 bloc de 48 octets i escriu aquests octets a la memòria començant per l'adreça apuntada pel punter alumne. |