int mit pipe verschicken
-
Hallo,
Ich beschäftige mich mit Interprozesskommunikation.
Ich habe Probleme bei der Funktionsweise vom Befehl pipe() und werde auch aus sämltlichen Seiten, die ich bei meiner Rechersche gefunden habe nicht schlau.Kann mir jemand bei folgendem Problem helfen?
Ich möchte in einem Elternprozess int-Werte in die Pipe schreiben und diese im Kidprozess wieder auslesen.
Ich erstelle die pipe also mittels
int Pipe[2]; if(pipe(thePipe<0){ perror("Error"); }
Ich möchte jetz im Elternprozess ein Int- Zahl in die Pipe schreiben und
danach im Kindprozess wieder auslesen.Ich hab schon ziemlich viel dazu im Netz gefunden, verstehe aber nie, welche
Parameter ich dem Befehl write mitgeben muss...z.B.
write(thePipe[1],puffer,PIPE_BUF)
Ich habe einfach keinen Plan, wo jetz wirklich die Daten drinnen stehn, die durch die Pipe gesendet werden. Muss ich die zuerst in den Puffer schreiben?
das selbe bei
read(thePipe[0],puffer,PIPE_BUF)
...wie krieg ich da jetzt konkret wieder Daten aus der Pipe heraus??
Vl. kann mir das mal wer erklären, ODER eine Link geben, wo das wirklich für die Allerdümmsten erkärt wird. Ich hab wirklich schon lang recherschiert, also bitte nicht gleich aufschrein und sagen: "Das steht überall im Netz". Ich hab viel gefunden, und ich habs einfach noch nicht verstanden. Deshalb frag ich hier...
Vielen Dank!
Beste Grüeße!
guitargod.
-
Ab in die Unix-Ecke?
-
"Das steht überall im Netz"
Hmm. Es steht sogar auf Wikipedia...
http://de.wikipedia.org/wiki/Pipe_(Informatik)
-
Hier mal ein Beispiel für dein Problem:
#include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <sys/wait.h> static void parent(int p[2]) { int i = 10; printf("Parent sendet!\n"); write(p[1], &i, sizeof(int)); printf("Parent ready\n"); } static void child(int p[2]) { int i; printf("Child empfaengt\n"); read(p[0], &i, sizeof(int)); printf("empfangen: %d\n", i); } int main (void) { int p[2]; pid_t id; if (pipe(p) != 0) { printf("(E) konnte Pipe nicht einrichten\n"); return 1; } id = fork(); switch(id) { case 0: child(p); break; case -1: printf("(E) konnte Process nicht teilen!\n"); break; default: parent(p); waitpid(id, NULL, 0); break; } close(p[0]); close(p[1]); return 0; }
Gruß mcr
-
Dankeschön!
Der Bspcode war sehr besonders hilfreich!Beste Grüße!