Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Named Pipe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.03.2009, 20:52 Uhr
~julius-krebs
Gast


# Ziel
Mittels einer "Named Pipe" sollen Daten zwischen zwei Programmen ausgetauscht werden (Interprocess Communication).

# Umgebung
- C++, GNU Compiler
- Linux - Untuntu 8.10
- Code http://web353.s9.benutzer-login.de/files_beyond/code.tar.gz

# Funktionstüchtig
Es können über die Konsole (echo "TEXT" > DATEI) übermittelte Daten empfangen werden.

# Problem
Die vom "Sendeprogramm" übermittelten Daten werden nur dann empfangen, wenn anschließend mittels der Konsole Daten gesendet werden.
Beispiel:
Sender sendet: "Sender-"
Empfänger: NICHTS
Konsole: "Konsole"
Empfänger: "Sender-Konsole"
Man könnte meinen, die Daten des Senders seien im irgendwo im Zwischenspeicher hängen geblieben. Doch selbst das Beenden des Senders (und damit einem definitiven Flush) bringt keine Verbesserung.


Vielen Dank schon mal für eure Mühen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.03.2009, 21:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
Hausaufgaben werden so nicht erledigt.

Aber ein Hinweis bzgl Pipes:

www.fun-soft.de/showtopic.php?threadid=20339
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.03.2009, 21:41 Uhr
~julius-krebs
Gast


Ich habe mich bereits ausführlich bzgl. meines Problems recherchiert, schade das der Post anscheinend nicht den Eindruck macht.

Um euch ein wenig Arbeit beim Durchforsten des Codes abzunehmen habe ich ein paar Schnipsel herauskopiert:

# Code
- Da das Archiv nur drei Ordner enthält, habe ich die "Zumüllgefahr" nicht so ernst genommen, entschuldige bitte.
- Nun also in Ausschnitten:


C++:
/* Erstelle Pipe */
umask(0);
mknod("/tmp/el_inp_c.pipe", S_IFIFO|0666, 0);

/* Read */
fread(data, 1, cnt, file_r);

/* Write */
fwrite(data, 1, cnt, file_w);
fflush(file_w);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.03.2009, 15:50 Uhr
~julius-krebs
Gast


# Beobachtung
Die empfangenden Daten werden nur dann registriert, wenn eine line feed ('\n') angehängt ist. Und genau das macht die Konsole (mit der es immer einwandfrei geklappt hat) im Gegensatz zu meinem Sender.
Merkwürdig ist, dass dieses Verhalten trotz dem Binary Mode überhaupt auftritt.
[cide]file_r = fopen("/tmp/el_out_c.pipe", "rb");[/code]

# Konsequenz
Da es sich um Binärwerte handelt kann ich meinen Daten nicht einfach ein line feed Steuerzeichen anghängen, da dieses in den Daten selbst vorkommen kann.
Daraus ergibt sich die Frage welche Möglichkeiten es noch gibt, den Empfänger auch ohne line feed Steuerzeichen reagieren zu lassen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: