2009-08-05 8 views
1

Ist es möglich, dass N Dateideskriptoren für ein Programm als 1 Dateideskriptor betrachtet werden, so dass Daten, die über einen der N Dateideskriptoren (dh von N Sockets) empfangen werden, zurück an die aufrufende API auf den einzelnen Dateideskriptor weitergeleitet werden, die Tatsache verbergen, dass es tatsächlich von einem anderen Dateideskriptor kommen könnte? Ist es auch möglich, Schreibvorgänge in ähnlicher Weise abstrahieren zu lassen (aber zurück zum korrekten N-ten Deskriptor)?N: 1 Dateideskriptoren?

+0

Was meinen Sie mit dem "richtigen Nth" -Deskriptor? "Ähnlich abstrahiert" würde bedeuten, dass Schreibvorgänge auf alle Deskriptoren und nicht auf den "richtigen" Deskriptor gehen würden. Andernfalls versuchen Sie, ein Muxer/Demuxer-Paar zu erstellen, aber dafür müssen Sie N in die Lese-/Schreib-Chunks einbetten. –

+0

Erinnert mich an Rohre ... – mpen

Antwort

3

Da Sie das Wort socket markieren und verwenden, nehme ich an, dass Ihre Daten über einen Netzwerkpfad kommen und Sie tatsächlich mehrere Quellen über denselben Socket lesen möchten.

Wenn Sie mit TCP/IP-Sockets arbeiten, haben Sie dieses Schema bereits mit UDP Sockets, die auf einem lokalen Port abhören, an den mehrere Quellen Daten senden können.

Sie können nicht eine solche TCP Buchse haben, aber die select API ist auf allen gängigen Implementierungen verfügbar Sie mehrere TCP-listening-Buchsen, eine pro Quelle öffnen zu lassen, und dann auf die ganze Menge eine ausgewählte zu tun. Du wirst die Quelle hier nicht "verstecken" können.

Wenn Abstraktion ist, was Sie nach, eine bessere Idee wäre, eine kleine Anwendung zu schreiben, die diese mehrere Kommunikations Endpunkte verwalten und mit Ihrem primären Anwendung über IPC sprechen. Sie können einen Kurzkopf implementieren, um Endpunkte an diese kleine Anwendung zu adressieren. Ihre primäre Anwendung wird dann alles über einen Kommunikationspunkt sehen.

Es wird auch Ihr Problem der Abstraktion der Schreibvorgänge schön lösen.