2010-10-23 6 views
2

J'ai un processus qui a continuellement besoin d'écrire des informations. En outre, il existe un second processus qui se connecte parfois au "canal d'information" du processus d'écriture et devrait lire les informations qui sont écrites depuis qu'il est connecté. Ce processus peut également déconnecter et reconnecter plusieurs fois.mkfifo Alternative

Je suis actuellement en train de réaliser cela avec un tuyau nommé, en utilisant mkfifo() dans mon programme C++. Malheureusement si j'appelle open() sur ce fifo il bloque jusqu'à ce qu'un processus ouvre le fifo pour la lecture. C'est tout à fait normal pour les pipes nommés, mais j'ai besoin que cette commande d'ouverture soit non-bloquante.

Connaissez-vous une alternative à mkfifo dans ce cas?

Heinrich

+0

J'ai trouvé mqueue.h qui semble vraiment intéressant. Est-ce que quelqu'un sait si cela serait une solution appropriée? – Erik

+1

Vous devrez éventuellement bloquer ou supprimer des données, alors lesquelles préférez-vous? – ninjalj

Répondre

1

Vous pouvez utiliser des sockets Unix-domain ou des sockets TCP standard sur une interface de bouclage.

+0

Ce n'est pas une solution parce que mon auteur qui est le serveur devra attendre un client avant de l'envoyer et sera bloqué dans la méthode accept(). – Erik

0

Vous pouvez utiliser la mémoire partagée ou mmap. Elle doit contenir un décalage par rapport aux données les plus anciennes, et le bloc de mémoire pour les données

fifo est limité à 64k (dépend de la distribution et de certains paramètres).

0

J'ai finalement utilisé la file d'attente de messages unix, Reader et Writer can.be a commencé tout à fait independet et tout peut être réalisé non bloquant