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 .

Nota: La subrutina fread es una llamada de biblioteca de subrutina leer de almacenamiento intermedio. Lee datos en bloques de 4KB . Para tamaños de bloque de cinta mayores que 4KB, utilice la subrutina Abierto y la subrutina leer .

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.
Nota: Dependiendo de la rutina de biblioteca a la que se enlaza la aplicación, esta subrutina puede devolver EINTR. Consulte la subrutina señal con respecto a sa_restart.
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.