Estoy escribiendo un plugin fusible en C. Estoy hacer el seguimiento de las estructuras de datos en el sistema de archivos a través de estructuras como:¿Las matrices están almacenadas como un puntero o en su totalidad dentro de C struct? (Era: Cómo volcar estructuras en el disco cuando algunos campos son punteros?)
typedef struct {
block_number_t inode;
filename_t filename; //char[SOME_SIZE]
some_other_field_t other_field;
} fs_directory_table_item_t;
Obviamente, tengo que leer (escribir) estas estructuras desde (hasta) el disco en algún momento. Podría tratar la estructura como una secuencia de bytes y hacer algo como esto:
read(disk_fd, directory_table_item, sizeof(fs_directory_table_item_t));
... excepto que no puede funcionar como filename
es en realidad un puntero a la matriz char
.
realmente me gustaría evitar tener que escribir código como:
read(disk_df, *directory_table_item.inode, sizeof(block_number_t));
read(disk_df, directory_table_item.filename, sizeof(filename_t));
read(disk_df, *directory_table_item.other_field, sizeof(some_other_field_t));
... para cada estructura en el código, ya que tendría que replicar código y cambios en no menos de tres diferentes lugares (definición, lectura, escritura).
¿Alguna idea de DRYer pero que aún se puede mantener?
por curiosidad, ¿qué FUSE? – falstro
oh, y es 'filename' un puntero, o como su comentario (y uso del operador sizeof) implica, una matriz? (en este último caso, no tendría problema ..) – falstro
Este FUSE: http://fuse.sourceforge.net/ Y sí, 'filename' es una matriz de caracteres de longitud fija. (Al menos, es para el futuro previsible). – badp