2009-08-31 7 views
7

Ich möchte eine Named Pipe, wie die von "mkfifo" erstellt, aber einen Vorbehalt erstellen. Ich möchte, dass das Rohr bidirektional ist. Das heißt, ich möchte, dass Prozess A in den FIFO schreibt und B verarbeitet, um daraus zu lesen, und umgekehrt. Eine mit "mkfifo" erstellte Pipe ermöglicht es dem Prozess A, die Daten zu lesen, die in die Pipe geschrieben wurden. Normalerweise würde ich zwei Pipes verwenden, aber ich versuche, ein tatsächliches Gerät zu simulieren, also möchte ich, dass die Semantik von open(), read(), write() usw. dem tatsächlichen Gerät so ähnlich wie möglich ist. Wer weiß von einer Technik, um dies zu erreichen, ohne auf zwei Rohre oder einen benannten Sockel zurückgreifen zu müssen?Named Pipe ähnlich wie "mkfifo" Erstellung, aber bidirektionale

Antwort

5

Verwenden Sie einen Unix-Domain-Socket.

Oh, du hast gesagt, du willst nicht die einzige verfügbare Lösung verwenden - einen Unix-Domain-Socket.

In diesem Fall stecken Sie fest mit dem Öffnen von zwei benannten Pfeifen oder ohne. Oder schreibe natürlich deinen eigenen Gerätetreiber für sie - du könntest es sowieso für die Open-Source-Systeme tun; Für die Closed-Source-Systeme (Windows, AIX, HP-UX) ist es möglicherweise schwieriger.

4

Oder pty ("Pseudo-Terminal-Schnittstelle"). man pty.

+3

A pty kommt mit einer Reihe von Sachen, die Sie nicht wollen - in der Regel. Wie alle Terminaldisziplinen. Aber es denkt über den Tellerrand hinaus, um es zu erwähnen. –