Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/05435.jsonl.gz/14

El sistema de I/O (Input/Output) del C ofrece al programador en C un consistente interfaz independiente de la hardware. En otras palabras, el sistema de I/O ofrece un cierto nivel de abstracción entre el programa y el dispositivo en uso.
Esta abstracción se llama flujo, y el dispositivo donde se fijan los datos archivo (en inglés file.
El sistema ANSI del C es estudiado para ser utilizado con una amplia gama de dispositivos entre los que se encuentran los terminales, unidades de disco e lectores de cintas. Aunque los dispositivos sean diferentes entre sí, el sistema ANSI del C los transforma en unidades lógicas con un dispositivo único llamado flujo. Todos los flujos se comportan de modo análogo y son independientes de la hardware. Las funciones empleadas para escribir en el disco pueden ser utilizadas para escribir en la pantalla o en la impresora.
En este sentido se distinguen dos tipos de flujo: de texto y binario.
Un flujo de texto es un secuencia de caracteres. En el interior de un flujo de texto se pueden efectuar conversiones de caracteres según la necesidad. Por ejemplo, un carácter de línea nueva se puede convertir en un carácter de retorno del carro mas un carácter de salto de línea.
Un archivo (file) es un concepto lógico que puede ser aplicado a cualquier cosa, desde datos del disco hasta terminales. Mediante la apertura de un archivo se asocia un flujo de datos entre este y el computador a través del programa correspondiente.
El interfaz que une el sistema ANSI de I/O del C es el puntero de archivo definido con el tipo FILE el cual representa una estructura (más adelante se verá el concepto structur que contiene información del archivo como el nombre del mismo, el status, la posición del la ventana de lectura etc. El tipo FILE utilizado para la declaración de un putero de archivo se encuentra definido en stdio.h.
La creación de una variable puntero de archivo sería:
La función fopen() tiene dos objetivos: primero abrir el flujo y asociarlo al archivo correspondiente y segundo pasar a la variable puntero la dirección de la estructura que contiene los datos correspondientes a dicho archivo.
donde name es el nombre del archivo y mode es el modo con el que se tiene acceso a los datos de dicho archivo. El nombre de un archivo tiene que ser conforme con la sintaxis del sistema operativo correspondiente. En el DOS puede requerir la ruta del archivo (path).
En caso de faltar la especificación b o t que indica el modo binario o el modo de texto el modo lo marca la variable _fmode cuyo valor es uno de los dos definidos en el archivo fcntl.h O_TEXT o O_BINARY.
En el caso de "w+" si el archivo existe se sobrescribe sobre él.
donde pf es un puntero de archivo de tipo FILE que es obtenido por medio de la función fopen(). Por razones históricas getch() retorna un valor de tipo entero (int) en el cual el byte superior es cero.
getch() retorna EOF (Ende Of File o final de archivo) cuando llega al final del archivo o cuando se verifica un error
donde fp es un puntero de file y car el carácter que se desea escribir en el archivo. Por razones históricas car es de tipo entero (int) en el cual el byte superior es cero.
Si la escritura se realiza con éxito la función retorna el carácter escrito. Si no retorna EOF (Ende Of File o final de archivo)
Donde buffer es un puntero al área de memoria que recibe los datos leídos del archivo, lenb. es el tamaño en bytes de un bloque y n el número de bloques que se desean leer. fp es un puntero de file a un flujo abierto precedentemente.
La función fread() retorna el número de bloques leídos que deberá ser n. En caso de error o de alcanzar el final del archivo retorna un número diferente a n (posiblemente 0).
Donde buffer es un puntero al área de memoria que contiene los datos para escribir en el archivo, lenb. es el tamaño en bytes de un bloque y n el número de bloques que se desean escribir. fp es un puntero de file a un flujo abierto precedentemente.
La función fwrite() retorna el números de bloques escritos que deberá ser n. En caso de error o de alcanzar el final del archivo retorna un número diferente a n (posiblemente 0).
En este caso fp es un puntero a un archivo obtenido con la llamada de fopen(); num byte es un entero largo que representa el número de bytes a contar desde el origen dado en origine para llegar a la posición final.
En la tabla que sigue se expresan los valores que puede tomar origine junto con los macros definidos en stdio.h que expresan dichos valores.
Si origine es igual a SEEK_SET numbyte expresa el numero de bytes a contar desde la posición inicial hacia adelante.
Si origine es igual a SEEK_CUR numbyte expresa el numero de bytes a contar desde la posición actual hacia adelante.
Si origine es igual a SEEK_END numbyte expresa el numero de bytes a contar desde la posición final hacia atrás.
La función fclose() cierra un flujo abierto con una llamada a fopen() despues de haber almacenado los datos en el archivo correspondiente a dicha llamada. La omisión de esta función puede causar varios problemas como pérdida datos, destrucción del archivo o posibles errore en el programa. Por otra parte la función fclose(), libera el bloque de control del archivo asociado al flujo dejándolo nuevamente disponible.