Parent Prozess bleibt bei fgets hängen
-
Hallo,
ich habe folgendes vereinfachtes Code:
int main(){ pid_t pid; int fd1[2]; int fd2[2]; FILE *readfd; FILE *writefd; char buf[PIPE_BUF]; pipe( fd1 ); pipe( fd2 ); pid = fork(); if (pid == 0){ //child dup2( fd1[0], STDIN_FILENO ); dup2( fd2[1], STDOUT_FILENO ); close( fd1[0] ); close( fd1[1] ); close( fd2[0] ); close( fd2[1] ); execlp("./sendCommand","./sendCommand",NULL); } else if (pid > 0){ //parent close( fd1[0] ); close( fd2[1] ); writefd = fdopen (fd1[1], "w"); readfd = fdopen (fd2[0], "r"); ... do{ fprintf(writefd, "Command %s %s\n",com1,com2); fflush(writefd); fgets(buf,PIPE_BUF,readfd); //macht probleme ... }while(i < commands); } }
Falls ich fgets auskommentiere, so werden alle commands gesendet. Wenn ich fgets wieder benutze, so werden nur ein paar Kommandos gesendet und das Programm blockiert dann. Ich verstehe das nicht. Für eure hilfe bin ich dankbar.
Danke + Gruss,
Haksi
-
liegt wohl daran, dass niemand in deine 'readfd' was sendet. gibt's nicht 'ne funktion den status dieser pipes abzufragen (ob was im buffer ist, oder so)?
-
Das Programm, dass durch execlp gestartet wurde, schreibt in readfd.
-
haksi74 schrieb:
Das Programm, dass durch execlp gestartet wurde, schreibt in readfd.
tja, aber wenn nix ankommt...
schreibt dein programm denn auch fleissig '\n' rein? fgets für stdin wartet nämlich darauf. bei pipes wird's wohl nicht anders sein.