Llenguatge de programació C (XII). Entrada/Sortida

L'entrada/sortida amb C es realitza utilitzant la biblioteca estàndard. En funció del criteri es poden distingir els següents tipus d'entrades/sortides:

  1. Per al fitxer: estàndard/explícit
  2. Atès el format: sense format/amb format
  3. Atès la mena d'accés: seqüencial/directe

Les funcions scanf i print vistes fins al moment treballen amb arxius estàndard, amb format i accés seqüencial.

Entrada/sortida sobre fitxers estàndard

Els arxius estàndard que maneja C són tres: stdin per a entrada, stdout per a sortida i stob per a missatges d'error. Aquests fitxers són proporcionats pel sistema operatiu (oberts) al programa principal per al seu ús directe. Els arxius estàndard són per defecte el teclat i la pantalla, però es poden redirigir a través del sistema operatiu. Els caràcters < i > en unix i dos s'utilitzen per a això. Les funcions scanf i print esmentades a la biblioteca de C són unes altres i més importants per a treballar amb arxius estàndard d'entrada/sortida: getchar, putchar, gets i puts. Les planes són sense format i mentre les dues primeres llegeixen o escriuen un sol caràcter, les altres manegen una línia completa. La seva gestió es troba en el fitxer stdio.h, igual que la resta de funcions d'entrada/sortida, i són les següents:

extern int getchar ( );extern
int putchar (int);extern char
* gets (char*);extern int puts
(char*);

En els programes 1 i 2 es pot veure com utilitzar les funcions getc i gets. En tots dos exemples es defineix la funció que llegeix una línia i calcula la longitud de la línia.

Programa 1. Utilització de la funció getchar.
Programa 2. Utilització de la funció gets.

Accés/Sortida

El concepte de fitxer per a C és general, ja que en ell s'inclouen tant els dispositius (teclat, pantalla, impressora, ...) com els fitxers de la memòria auxiliar (discos, disquets, cintes, ...).

Igual que en altres llenguatges, aquest fitxer ha d'obrir-se perquè la informació de control corresponent es carregui en memòria i sigui consultada per les funcions bàsiques d'entrada/sortida del sistema operatiu. Aquesta informació de control s'emmagatzema en una estructura denominada FILE (definida en el fitxer stdio.h) quan s'obre el fitxer i la usarem amb un punter, ja que en dir les funcions sobre un fitxer la referència de la seva estructura FILE ha de ser esmentada com a argument.

Per tant, per a l'ús dels fitxers, en els programes C es definirà una variable del tipus FILE * perquè en obrir-los (amb la funció dels fops) rebi el resultat i pugui ser utilitzada com a paràmetre en la resta de funcions d'entrada/sortida.

En la taula 1 es mostra una llista de funcions d'entrada/sortida que manegen l'estructura FILE, en la qual es mostren tant el tipus de dades del paràmetre i resultat com una explicació breu.

Totes les funcions descrites en la taula 1, excepte el fseek, s'utilitzen en accés seqüencial sobre un fitxer permanentment obert per al maneig de caràcters (fgetc, fputc), línies (fgets, fputs), registres (fread, fwrite) o situacions especials (feof, ferror). Si es determina stdin o stdout on s'ha de col·locar fp, la funció es realitza sobre l'entrada o sortida estàndard.

Taula . Maneres d'utilitzar la funció de fop.

Les lectures i escriptures es realitzen en la posició actual, inicialitzant aquesta posició amb la funció de fopen i actualitzant-la en cada captura. Depenent del paràmetre de la funció de fops, a més de seleccionar la posició actual, es defineixen les operacions que poden dur-se a terme, tal com es mostra en la taula 2.

Taula . Funcions d'entrada/sortida.

En el Programa 3 s'utilitzen les funcions de E/S per a la redacció del programa cat utilitzat en UNIX. Mitjançant aquest programa s'anoten els fitxers que passen com a argument, un darrere d'un altre en la sortida estàndard. Els arguments es manegen mitjançant les variables argc i argv, tal com vam veure en el capítol 10.

Programa 3. Programa cat que realitza l'encadenat dels fitxers.

Accés directe

Com s'ha vist en els exemples, les funcions de E/S bàsiques de la biblioteca (fgetc, fputc, freda, fwrite, ...) faciliten l'accés seqüencial, ja que en obrir el fitxer utilitzen i actualitzen la seva posició actual.

Per a dur a terme l'accés directe, les funcions esmentades han de combinar-se amb el FSE, que permet situar-se en una posició determinada. Els paràmetres de la funció fseek són el descriptor del fitxer (tipus FILE *), el desplaçament i la manera. Es distingeixen tres formes, cadascuna d'elles triant un punt diferent per a aplicar el desplaçament. Selecciona l'inici del fitxer SEEK_SET, la posició actual SEEK_CUR i el final del fitxer SEEK_END.

En el Programa 4 es defineix la funció “correctoâ” que llegeix o escriu un camp de longitud fixa que es troba en una posició determinada segons un paràmetre.

També pot ajudar la funció ftell, que ens retorna la posició actual en l'accés directe. En veure com es programa l'ajuda de cerca que tenen els editors en el programa 5, tenim un exemple d'ús de la funció ftell.

Programa 4. Ús de l'accés directe.
5è programa. Ús de les funcions fseek i ftell.
Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila