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?
Vous devez vous connecter pour publier un commentaire.
LIST_ENTRY crée des champs à mettre dans votre structure qui conviennent pour relier les éléments, de sorte que vous n'avez pas à vous soucier des détails de ces pointeurs.
Pour ensuite créer une liste que vous souhaitez utiliser LIST_HEAD():
Vous pouvez initialiser la liste d'en-tête à l'aide de LIST_INIT():
Vous pouvez insérer des éléments à l'aide de la LIST_INSERT_*() macros:
C'est à partir de la liste exemple dans les pages de manuel http://www.manpagez.com/man/3/queue/
<sys/queue.h>
et il semble que l'exemple de lien n'est plus valide .. peut-être avez-vous un autre Lien ?