J'essaie de comprendre l'API de la liste chaînée du noyau Linux.Différence entre LIST_HEAD_INIT et INIT_LIST_HEAD
Selon Linux Kernel Linked List j'initialiser la tête de liste par INIT_LIST_HEAD
mais here (Linux Kernel Program) il est suggéré d'utiliser LIST_HEAD_INIT
à la place.
Voici un code de travail que j'ai écrit, mais je ne suis pas sûr de l'avoir fait correctement. Quelqu'un pourrait-il vérifier que tout va bien?
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
typedef struct edge_attr {
int d;
struct list_head list;
} edge_attributes_t;
typedef struct edge {
int id;
edge_attributes_t *attributes;
} edge_t;
int main() {
int i;
struct list_head *pos;
edge_attributes_t *elem;
edge_t *a = (edge_t*)malloc(sizeof(edge_t));
a->id = 12;
a->attributes = (edge_attributes_t*) malloc(sizeof(edge_attributes_t));
INIT_LIST_HEAD(&a->attributes->list);
for (i=0; i<5; ++i) {
elem = (edge_attributes_t*)malloc(sizeof(edge_attributes_t));
elem->d = i;
list_add(&elem->list, &a->attributes->list);
}
list_for_each(pos, &(a->attributes->list)) {
elem = list_entry(pos, edge_attributes_t, list);
printf("%d \n", elem->d);
}
return 0;
}
ou maby a-> atrributes devrait être juste une tête de liste, pas une entrée de liste? – patseb