gcc (GCC) 4.7.0
c89
Здравейте,
Имам следната структура, която се опитвам да напиша и да се страхувам.
Въпреки това, тъй като моето устройство и ресурс са указатели. Fwrite ще прочете стойностите на указателя, а не данните. Не мога да използвам масив за устройството или ресурса. Само указатели, тъй като те трябва да бъдат динамично разпределени.
Разпределям цялата памет за структурните елементи, преди да пиша. Не е показано тук, тъй като искам да запазя фрагмента кратък. Нито освобождаване.
В моята функция fread разпределям паметта за устройството и ресурса, така че fread да чете в тези места в паметта. Това обаче няма да работи.
Кой е най-добрият начин да направите това?
Много благодаря за всеки съвет,
struct data {
int id;
int set;
char *device;
char *resource;
};
struct database {
struct data **db_data;
size_t database_rows;
size_t database_data_size;
};
int database_write(FILE *fp, const struct database *db)
{
rewind(fp);
if(fwrite(*db->db_data, sizeof(struct data), 1, fp) == -1) {
return DATABASE_ERROR;
}
return 0;
}
struct database* database_read(FILE *fp, size_t db_rows, size_t db_data_size)
{
struct database *db = NULL;
size_t i = 0;
db = malloc(sizeof(struct database));
db->database_rows = db_rows;
db->database_data_size = db_data_size;
db->db_data = malloc(sizeof(struct data) * db_rows);
for(i = 0; i < db_rows; i++) {
db->db_data[i] = malloc(sizeof(struct data));
db->db_data[i]->device = malloc(db_data_size);
db->db_data[i]->resource = malloc(db_data_size);
}
rewind(fp);
if(fread(*db->db_data, sizeof(struct data), 1, fp) == -1) {
return NULL;
}
return db;
}