D-Bus est assez utile et très stable pour faire de l'ipc sur le même hôte.http://www.freedesktop.org/wiki/Software/dbus
Comme vous l'avez vu, vous pouvez utiliser pour la communication inter processus :
- Mémoire partagée
- Canaux nommés
- Sockets TCP/UDP (éventuellement locaux)
La mémoire partagée a l'avantage de la performance, car vous n'avez pas de tampon lors de l'envoi/de la réception de messages. Mais vous devez synchroniser vos échanges de données avec un autre IPC. Il peut s'agir de sémaphores IPC ou ... de tubes ou de sockets nommés.
Lorsque la performance n'est pas l'objectif principal, j'ai tendance à préférer les sockets car leur utilisation est simple et peut être étendue à la communication inter-ordinateurs.
La meilleure façon est d'abstraire votre communication avec une classe qui peut utiliser la mémoire partagée lorsque les deux processus sont sur le même ordinateur et les sockets sinon. Ensuite, vous devez choisir entre UDP et TCP;-)
Pour les échanges synchro/buffer, privilégiez TCP car il est plus fiable.
Je n'utilise pas de tubes nommés car je préfère socket pour la possibilité d'utiliser la communication inter-ordinateurs et bien sûr, vous pouvez trouver de nombreuses bibliothèques de sockets portables...
mes2cents
MODIFIER :
Pour la synchronisation, la mémoire partagée n'est peut-être pas le meilleur outil. Dans votre cas, il peut être utilisé en partageant un petit espace mémoire, avec un espace pour chaque processus en attente de commandes. Vous pouvez soit interroger pour toute commande entrante, soit utiliser un sémaphore partagé. Le moyen le plus rapide est que vos processus attendent des sémaphores nommés et lisent un espace mémoire partagé pour leurs commandes/paramètres. L'utilisation de tubes nommés est sûrement plus simple mais pas si rapide. Vous n'avez sûrement pas besoin d'être aussi rapide ? Quoi qu'il en soit, faites abstraction de cela dans une classe qui modélise votre protocole d'échange et essayez les deux méthodes :-)
Un bon choix est d'utiliser socketpair, très rapide et efficace.
Boost a une belle bibliothèque InterProcess qui est multiplateforme et assez intuitive.
Je n'ai fait que jouer avec, donc il pourrait y avoir de meilleures alternatives.
Cependant, si vous n'avez pas vraiment besoin de mémoire partagée, je m'en tiendrai à une approche de messagerie. Vous éviterez les impasses et les conditions de course. Le principe du tuyau est vraiment génial, et il permet même des comportements paresseux qui peuvent vous faire économiser beaucoup de traitement en fonction du problème à traiter !