Comment utiliser la liste de sys/queue.h?

Actuellement, j'ai mis en œuvre une seule liste liée, comme suit:

struct PeerNode {
     struct Peer* cargo;
     struct PeerNode* next;
};

...et j'ai une structure qui contient un couple de ces listes liées, comme suit:

struct Torrent {
     ...
     struct PeerNode* peer_list;
     struct PeerNode* unchoked_peers;
     ...
}

Je voudrais remplacer ce en utilisant les macros fournies par sys/queue.h. Je suppose que je pourrais remplacer mon code avec quelque chose comme ceci:

struct Torrent {
     ...
     LIST_ENTRY(PeerNode, Peer) peer_list;
     struct PeerNode* unchoked_peers;
     ...
}

Puis, en regardant man queue, je crois que je voudrais initialiser les listes en faisant quelque chose comme ceci:

LIST_INIT(&peer_list);
LIST_INIT(unchoked_peers);

Cependant, je ne comprends pas comment LIST_ENTRY facteurs dans l'utilisation de la liste. À partir de la man page, il est dit: "La macro LIST_ENTRY déclare une structure qui relie les éléments dans la liste, mais je ne comprends pas vraiment ce que cela signifie.

Pourquoi voudrais-je déclarer une structure pour connecter les éléments dans la liste? Ne devrait pas chaque nœud être connecté au nœud suivant par l'intermédiaire d'un pointeur, comme ma première liste liée de mise en œuvre? Comment pourrais-je remplacer mes listes liées à la mise en œuvre fournis par sys/queue.h? Comment puis-je insérer un élément dans la liste?

InformationsquelleAutor rps | 2011-10-02