Problem mit Pipes



  • hallo ich habe folgendes grundsätzliches Problem:

    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/wait.h>
    
    int main()
    {
         int outpipe[2];
         int inpipe[2];
         int pid;
         char buffer[1024];
    
         pipe(outpipe);
         pipe(inpipe);
    
         pid = fork();
    
         if(pid == 0)
         {
              dup2(inpipe[0], 0);
              dup2(outpipe[1], 1);
    
              close(inpipe[1]);
              close(outpipe[0]);
    
              printf("tell me something\n");
              scanf("%s", buffer);
              printf("you told me: %s\n", buffer);
    
              return 0;
         }
         else
         {
              close(inpipe[0]);
              close(outpipe[1]);
    
              printf("reading from child\n");
              read(outpipe[0], buffer, 1024);
              printf("child wrote: %s\n", buffer);
    
              printf("do your input: ");
              scanf("%s", buffer);
              printf("writing to child\n");
              write(inpipe[1], buffer, strlen(buffer));
    
              printf("reading from child\n");
              read(outpipe[0], buffer, 1024);
              printf("child wrote: %s\n", buffer);
    
              wait(0);
    
              return 0;
         }
    }
    

    dieses Programm bleibt in zeile 38 stehen, d.h. read kehrt nicht zurück. sobald ich jedoch scanf in zeile 27 auskommentiere, funktioniert alles wunderbar, d.h. die jeweiligen ausgaben landen auf dem Bildschirm.

    was ist da los? ich bin doof? Linux ist doof? pipes sind doof? scanf ist doof?