fork(16) download
  1. #include <stdlib.h>
  2. #include <unistd.h>
  3.  
  4. void infinit_pipe(char ***cmd)
  5. {
  6. int p[2];
  7. pid_t pid;
  8. int fd_in = 0;
  9. int i = 0;
  10.  
  11. while (cmd[i] != NULL)
  12. {
  13. pipe(p);
  14. if ((pid = fork()) == -1)
  15. {
  16. exit(1);
  17. }
  18. else if (pid == 0)
  19. {
  20. dup2(fd_in, 0);
  21. if (cmd[i+1] != NULL)
  22. dup2(p[1], 1);
  23. close(p[0]);
  24. execvp((cmd)[i][0], cmd[i]);
  25. exit(2);
  26. }
  27. else
  28. {
  29. wait(NULL);
  30. close(p[1]);
  31. fd_in = p[0];
  32. i++;
  33. }
  34. }
  35. }
  36.  
  37. int main()
  38. {
  39. char *ls[] = {"ls", NULL};
  40. char *grep[] = {"find", ".", "-name", "*", NULL};
  41. char *wc[] = {"wc", NULL};
  42. char **cmd[] = {ls, grep, wc, NULL};
  43.  
  44. infinit_pipe(cmd);
  45. }
  46.  
Success #stdin #stdout 0s 3756KB
stdin
Standard input is empty
stdout
      2       2       9