Subrutina fwrite o fwrite
Finalidad
Lee y graba archivos binarios.
Biblioteca
Biblioteca C estándar (libc.a)
Sintaxis
#include <stdio.h>
size_t fread (Pointer, Size, NumberOfItems, Stream)
void *Pointer;
size_tSize, NumberOfItems;
FILE *Stream;
size_t fwrite (Pointer, Size, NumberOfItems, Stream)
const void *Pointer;
size_t Size, NumberOfItems;
FILE *Stream;
Descripción
La subrutina fread copia el número de elementos de datos especificados por el parámetro NumberOfItems del flujo de entrada en una matriz que comienza en la ubicación apuntada por el parámetro Pointer. Cada elemento de datos tiene el formato *Puntero.
La subrutina fread deja de copiar bytes si se encuentra una condición de fin de archivo (EOF) o de error mientras se lee de la entrada especificada por el parámetro Stream, o cuando se ha copiado el número de elementos de datos especificado por el parámetro NumberOfItems. Esta subrutina deja el puntero de archivo del parámetro Corriente , si se ha definido, apuntando al byte que sigue al último byte leído. La subrutina fread no cambia el contenido del parámetro Corriente .
Los 2st_atimese marcará para la actualización por la primera ejecución satisfactoria de la subrutina fgetc, fgets, fgetwc, fgetws, fread, fscanf, getc, getchar, Obtencioneso scanf utilizando una corriente que devuelve datos no suministrados por una llamada anterior a la subrutina ungetco ungetwc .
La subrutina fwrite graba elementos de la matriz a los que apunta el parámetro Puntero a la corriente a la que apunta el parámetro Corriente . El parámetro Tamaño especifica el tamaño de cada elemento. La subrutina fwrite escribe el número de elementos especificado por el parámetro NumberOfItems. El indicador de posición de archivo para la corriente se ha avanzado por el número de bytes grabados satisfactoriamente. Si se produce un error, el valor resultante del indicador de posición de archivo para la corriente es indeterminado.
La subrutina fwrite añade elementos a la corriente de salida de la matriz a la que apunta el parámetro Puntero . La subrutina fwrite añade tantos elementos como se especifique en el parámetro NumberOfItems.
La subrutina fwrite detiene la escritura de bytes si se encuentra una condición de error en el flujo, o cuando se ha escrito el número de elementos de datos especificado por el parámetro NumberOfItems. La subrutina fwrite no cambia el contenido de la matriz a la que apunta el parámetro Puntero .
Los 2st_ctimeyst_mtimeLos campos se marcarán para la actualización entre la ejecución satisfactoria de la subrutina fwrite y la siguiente finalización de una llamada a la subrutina fflush o fclose en la misma corriente, la siguiente llamada a la subrutina Salida o la siguiente llamada a la subrutina abortar .
Parámetros
| Elemento | Descripción |
|---|---|
| Puntero | Apunta a una matriz. |
| Tamaño | Especifica el tamaño del tipo de variable de la matriz a la que apunta el parámetro Puntero . El parámetro Tamaño se puede considerar igual que una llamada a la subrutina sizeof . |
| NumberOfItems | Especifica el número de elementos de datos. |
| Flujo | Especifica la corriente de entrada o salida. |
Valores de retorno
Las subrutinas fread y fwrite devuelven el número de elementos realmente transferidos. Si el parámetro NumberOfItems contiene un 0, no se transfiere ningún carácter y se devuelve el valor 0. Si el parámetro NumberOfItems contiene un número negativo, se convierte a un número positivo, ya que el parámetro NumberOfItems es de tipo unsigned.
Códigos de error
Si la subrutina fread no es satisfactoria porque la corriente de E/S no tiene almacenamiento intermedio o es necesario leer los datos en el almacenamiento intermedio de la corriente de E/S, devuelve uno o más de los siguientes códigos de error:
| Elemento | Descripción |
|---|---|
| FEAGA | Indica que el distintivo O_NONBLOCK está establecido para el descriptor de archivo especificado por el parámetro Corriente y el proceso se retardaría en la operación de fread . |
| EBADF | Indica que el descriptor de archivo especificado por el parámetro Corriente no es un descriptor de archivo válido abierto para lectura. |
| EINTR | Indica que la operación de lectura ha finalizado debido a la recepción de una señal y no se han transferido datos. |
| Elemento | Descripción |
|---|---|
| EIO | Indica que el proceso es un miembro de un grupo de procesos en segundo plano que intenta realizar una lectura desde su terminal de control, y el proceso está ignorando o bloqueando la señal SIGTTIN o el grupo de procesos no tiene ningún proceso padre. |
| ENOMEM | Indica que no hay suficiente espacio de almacenamiento disponible. |
| ENXIO | Indica que se ha realizado una solicitud de un dispositivo no existente. |
Si la subrutina fwrite no es satisfactoria porque la corriente de E/S no está en el almacenamiento intermedio o el almacenamiento intermedio de la corriente de E/S debe vaciarse, devuelve uno o más de los siguientes códigos de error:
| Elemento | Descripción |
|---|---|
| FEAGA | Indica que el distintivo O_NONBLOCK o O_NDELAY se ha establecido para el descriptor de archivo especificado por el parámetro Corriente y que el proceso se ha retrasado en la operación de grabación. |
| EBADF | Indica que el descriptor de archivo especificado por el parámetro Corriente no es un descriptor de archivo válido abierto para escritura. |
| EFBIG | Indica que se ha intentado grabar un archivo que excede el tamaño de archivo del límite de proceso o el tamaño máximo de archivo del sistema. |
| EINTR | Indica que la operación de grabación se ha terminado debido a la recepción de una señal y no se han transferido datos. |
| EIO | Indica que el proceso es un miembro de un grupo de procesos en segundo plano que intenta realizar una grabación en su terminal de control, la señal de TOSTOP está establecida, el proceso no está ignorando ni bloqueando la señal de SIGTTOU y el grupo de procesos del proceso se ha quedado huérfano. |
| ENOSPC | Indica que no quedaba espacio libre en el dispositivo que contenía el archivo. |
| EPIPE | Indica que se ha intentado grabar en un conducto o en un proceso de primera entrada (FIFO) que no está abierto para su lectura por ningún proceso. Se envía una señal SIGPIPE al proceso. |
La subrutina fwrite tampoco se ha realizado correctamente debido a las siguientes condiciones de error:
| Elemento | Descripción |
|---|---|
| ENOMEM | Indica que no hay suficiente espacio de almacenamiento disponible. |
| ENXIO | Indica que se ha realizado una solicitud de un dispositivo no existente o que la solicitud estaba fuera de las posibilidades del dispositivo. |