Linguaxe de programación C (XII). Entrada/Saída

A entrada/saída con C realízase utilizando a biblioteca estándar. En función do criterio pódense distinguir os seguintes tipos de entradas/saídas:

  1. Paira o ficheiro: estándar/explícito
  2. Atendendo ao formato: sen formato/con formato
  3. Atendendo ao tipo de acceso: secuencial/directo

As funcións scanf e print vistas até o momento traballan con arquivos estándar, con formato e acceso secuencial.

Entrada/saída sobre ficheiros estándar

Os arquivos estándar que manexa C son tres: stdin paira entrada, stdout paira saída e stob paira mensaxes de erro. Estes ficheiros son proporcionados polo sistema operativo (abertos) ao programa principal paira o seu uso directo. Os arquivos estándar son por defecto o teclado e a pantalla, pero se poden redirixir a través do sistema operativo. Os caracteres < e > en unix e dous utilízanse paira iso. As funcións scanf e print mencionadas na biblioteca de C son outras e máis importantes paira traballar con arquivos estándar de entrada/saída: getchar, putchar, gets e puts. As planas son sen formato e mentres as dúas primeiras len ou escriben un só carácter, as outras manexan una liña completa. A súa xestión atópase no ficheiro stdio.h, do mesmo xeito que o resto de funcións de entrada/saída, e son as seguintes:

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

Nos programas 1 e 2 pódese ver como utilizar as funcións getc e gets. En ambos os exemplos defínese a función que le una liña e calcula a lonxitude da liña.

Programa 1. Utilización da función getchar.
Programa 2. Utilización da función gets.

Acceso/Saída

O concepto de ficheiro paira C é xeral, xa que nel inclúense tanto os dispositivos (teclado, pantalla, impresora, ...) como os ficheiros da memoria auxiliar (discos, disquetes, cintas, ...).

Do mesmo xeito que noutras linguaxes, este ficheiro debe abrirse para que a información de control correspondente cárguese en memoria e sexa consultada polas funcións básicas de entrada/saída do sistema operativo. Esta información de control almacénase nunha estrutura denominada FILE (definida no ficheiro stdio.h) cando se abre o ficheiro e usarémola cun punteiro, xa que ao chamar as funcións sobre un ficheiro a referencia da súa estrutura FILE debe ser mencionada como argumento.

Por tanto, paira o uso dos ficheiros, nos programas C definirase una variable do tipo FILE * para que ao abrilos (coa función dos fops) reciba o resultado e poida ser utilizada como parámetro no resto de funcións de entrada/saída.

Na táboa 1 móstrase una lista de funcións de entrada/saída que manexan a estrutura FILE, na que se mostran tanto o tipo de datos do parámetro e resultado como una explicación breve.

Todas as funcións descritas na táboa 1, excepto o fseek, utilízanse en acceso secuencial sobre un ficheiro permanentemente aberto paira o manexo de caracteres (fgetc, fputc), liñas (fgets, fputs), rexistros (fread, fwrite) ou situacións especiais (feof, ferror). Se se determina stdin ou stdout onde se debe colocar fp, a función realízase sobre a entrada ou saída estándar.

Táboa . Modos de utilizar a función de fop.

As lecturas e escrituras realízanse na posición actual, inicializando esta posición coa función de fopen e actualizándoa en cada captura. Dependendo do parámetro da función de fops, ademais de seleccionar a posición actual, defínense as operacións que poden levar a cabo, tal e como se mostra na táboa 2.

Táboa . Funcións de entrada/saída.

No Programa 3 utilízanse as funcións de E/S paira a redacción do programa cat utilizado en UNIX. Mediante este programa anótanse os ficheiros que pasan como argumento, uno detrás doutro na saída estándar. Os argumentos manéxanse mediante as variables argc e argv, tal e como vimos no capítulo 10.

Programa 3. Programa cat que realiza o encadeado dos ficheiros.

Acceso directo

Como se viu nos exemplos, as funcións de E/S básicas da biblioteca (fgetc, fputc, freda, fwrite, ...) facilitan o acceso secuencial, xa que ao abrir o ficheiro utilizan e actualizan a súa posición actual.

Paira levar a cabo o acceso directo, as funcións mencionadas deben combinarse co FSE, que permite situarse nunha posición determinada. Os parámetros da función fseek son o descriptor do ficheiro (tipo FILE *), o desprazamento e o modo. Distínguense tres formas, cada una delas elixindo un punto diferente paira aplicar o desprazamento. Selecciona o inicio do ficheiro SEEK_SET, a posición actual SEEK_CUR e o final do ficheiro SEEK_END.

No Programa 4 defínese a función “correctoâ” que le ou escribe un campo de lonxitude fixa que se atopa nunha posición determinada segundo un parámetro.

Tamén pode axudar a función ftell, que nos devolve a posición actual no acceso directo. Ao ver como se programa a axuda de procura que teñen os editores no programa 5, temos un exemplo de uso da función ftell.

Programa 4. Uso do acceso directo.
5º programa. Uso das funcións fseek e ftell.
Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila