Создание общей реализации связанного списка, которую можно использовать со структурами разного размера.

Привет, в настоящее время я работаю над проектом, в котором я создаю очень простую файловую систему, и я работаю над некоторыми реализациями inode и общего файлового кэша, и мне было интересно рассмотреть такие структуры:

typedef struct disk_inode {
  short type; /* file type */
  short nlinks; /* number of directory entries referring to this file
  int size;    /* file size in bytes */
  short inode_indir_idx;
  /* pointers to the first NDIRECT blocks */
  blknum_t direct[INODE_NDIRECT];
  blknum_t indirect; /* The rest of the blocks */ 
}disk_inode_t;


struct cache{
    short blocknr;
    char block[512];
};

есть ли способ создать общий список, который может использоваться обеими этими структурами? Это на C, и я не могу использовать стандартные библиотеки C.


person Community    schedule 12.05.2018    source источник


Ответы (1)


Вы можете создать общий связанный список, который будет принимать void * в качестве элемента. Однако такая реализация потребует от вас выделения вашего элемента в большинстве случаев.

Вот простой пример:

typedef struct list_s
{
    void *elm;
    struct list_s *next;
    struct list_s *prev;
} list_t;

typedef struct
{
    int elem1;
    int elem2;
    int elem3;
} my_struct_t;

int main(void)
{
    my_struct_t *elem = malloc(sizeof(my_struct_t));
    list_t *list = malloc(sizeof(list_t));

    list->prev = NULL;
    list->next = NULL;
    list->elm = elem;
    return 0;
}
person Ra'Jiska    schedule 12.05.2018