Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- child 1 start
- child 2 start
- child 3 start
- child 3 read (0), finish
- child 2 read (0), finish
- child 1 read (0), finish
- else {
- for (int j = 0; j < i; j++) {
- close(childs[j]);
- }
- close(p[1]);
- printf("child %d startn", i + 1);
- #include <stdlib.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- int main(int argc, char **argv) {
- int children_w[3];
- for (int i = 0; i < 3; ++i) {
- int p[2];
- if (0>pipe(p))
- { perror("pipe"); exit(1); }
- pid_t pid;
- if(0> (pid= fork()))
- { perror("fork"); exit(1); }
- if(pid==0) {
- /* Fix -- close the leaked write ends */
- int j;
- for(j=0; j<i; j++)
- close(children_w[j]);
- /* end fix*/
- close(p[1]);
- printf("child %d startn", i + 1);
- char buf[10];
- buf[0] = 0;
- int r;
- if ((r = read(p[0], buf, 9)) == -1) { perror("read");/*...*/ }
- printf("child %d read %s (%d), finishn", i + 1, buf, r);
- sleep(2);
- exit(0);
- }
- children_w[i] = p[1];
- close(p[0]);
- }
- for (int i = 0; i < 3; ++i) {
- // if (argc > 1) {
- // write(childs[i], "42", 2);
- // }
- // ============== HERE >>>
- close(children_w[i]);
- }
- pid_t pid;
- while ((pid = waitpid(-1, NULL, 0)) > 0) {
- printf("child %d exitedn", pid);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment