GLOBAL unit_size

unit_size=4; // Unidad mínima de lectura/escritura


La variable global predefinida unit_size indica cual es el tamaño de la unidad mínima de lectura y escritura de las funciones de archivos basadas en handles.

Por defecto valdrá siempre 4, ya que 4 bytes es el tamaño de los datos estándar INT (enteros de 32 bit), y todos los datos se alinean en memoria cada 4 bytes (ver la alineación de datos en memoria).

Las funciones que tienen en cuenta el tamaño de unidad indicado en unit_size son las siguientes:

  fread()
  fwrite()
  fseek()
  ftell()
  filelength()

Y además el campo size de la estructura global fileinfo.


Que el tamaño mínimo sea 4 implica que no se pueden leer ni escribir archivos cuya longitud no sea múltiplo de dicho número.

Se puede cambiar este tamaño; por ejemplo asignando 1 a unit_size (con la sentencia unit_size=1;). De este modo, todas las longitudes de las funciones anteriores se indicarán ahora en bytes (y no en datos).

No obstante, al cambiar el tamaño de la unidad, se debe tener en cuenta lo siguiente:

- SIZEOF() continuará devolviendo la longitud en datos (de 4 bytes). Por ejemplo, para grabar una tabla en disco no bastará con indicar sizeof(<tabla>) como longitud, sino que se deberá multiplicar la misma por 4 (en caso de haber definido unit_size como 1).

- Las funciones de archivos save() y load() (que no son funciones basadas en handles) continuarán indicando la longitud en datos.

- Las funciones de memoria dinámica malloc() y free() también continuarán trabajando con longitudes en datos, por lo que se deberán hacer los ajustes oportunos en caso de trabajar con ambos conjutos de funciones.


Ver: Datos globales - Alineación de datos en memoria