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).