Probleme beim Auslesen der Daten aus der Pipe
-
Bin echt überfragt, da ich es genauso anwende wie wir es in der Vorlseung behandelt haben. Allerdings ist die Ausgabe "Im textbuffer steht: " leer.
Sieht jemand woran das liegen könnte?#include <ctype.h> #include <sys/wait.h> #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int main() { int fehler,stat2,stat3; pid_t pid2,pid3; char textbuffer[50]; int deskr[2]; fehler=pipe(deskr); if (fehler==-1) printf("Fehler"); pid2=fork(); if (pid2<0) printf("Fehler"); if (pid2==0) { printf("[PID: %d , PPID: %d] geschrieben \n" , getpid(), getppid()); close(deskr[0]); write(deskr[1],"helloWorld",10); printf("[PID: %d , PPID: %d] geschrieben \n" , getpid(), getppid()); close (deskr[1]); exit(123); } if (pid2>0) { printf("[PID: %d , PPID: %d] p1 \n" , getpid(), getppid()); pid3=fork(); close(deskr[0]); close(deskr[1]); waitpid(pid2,&stat2,0); waitpid(pid3,&stat3,0); if (pid3<0) printf("Error"); //prozess 3 if (pid3==0) { close(deskr[1]); printf("[PID: %d , PPID: %d] P3 geht schlafen \n" , getpid(), getppid()); sleep(2); printf("[PID: %d , PPID: %d] P3 wacht auf \n" , getpid(), getppid()); read(deskr[0],textbuffer,10); printf("Im textbuffer steht:%s",textbuffer); close(deskr[0]); exit(213); } } return 0; }
edit by nman: Code wegen unlesbarer Einrückung durch astyle durchgejagt.
-
Bitte gebe dir etwas Mühe mit der Codeeinrückung, das ist ja unerträglich so.
Zum Fehler: Was denkst du, wird
close(deskr[0]); read(deskr[0],textbuffer,10);
funktionieren? Nein? Dann schau nochmal nach, was dein Code genau macht.
-
Naja der diskriptor wird doch geschlossen nachdem der fork() aufruf ist. Also müsste das Kind beide Deskriptoren geerbt haben oder nicht?
-
Juleian* schrieb:
Naja der diskriptor wird doch geschlossen nachdem der fork() aufruf ist. Also müsste das Kind beide Deskriptoren geerbt haben oder nicht?
Lies bitte die man: fork(2)-Manpage nochmal.
-
Oh, btw: Wenn du "helloWorld" auf einmal schreiben und lesen möchtest, schreibst/liest du mit 10 Zeichen genau eines zu wenig (das '\0' am Ende fehlt dir sonst).