雑なメモ書き

気楽にいきます

子プロセスからpipe経由でデータが欲しかった

大量に同一pipeへデータを一括で書き込もうかと思ったのでとりあえず子プロセスから頑張ってみた。

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include <sys/types.h>
#include <sys/wait.h>

#define BUFSIZE 10

int
main(int argc, char *argv[])
{
    pid_t childPid;
    int pipefd[2];

    if (pipe(pipefd) == -1) {
        perror("pipe");
        exit(EXIT_FAILURE);
    }

    int i;
    for(i = 0; i< 3; i++) {
        switch(childPid = fork()) {
            case -1:
                exit(EXIT_FAILURE);
            case 0:
                printf("child pid: %d\n",getpid());
                close(pipefd[0]);

                char buf[BUFSIZE];
                for (int i=0; i < BUFSIZE; i++)
                    buf[i] = i;

                write(pipefd[1], buf, BUFSIZE);
                close(pipefd[1]);

                _exit(0);
            default:
                break;
        }
    }

    while( (childPid = wait(NULL)) != -1) {
        printf("parent pid: %d\n",getpid());
        close(pipefd[1]);

        char buf;
        while(read(pipefd[0], &buf, sizeof buf ) > 0)
            printf("%d\n",buf);
        continue;
    }
    return 0;
}