C管道并不发送所有数字

时间:2014-04-27 19:47:39

标签: c fork pipe

所以我有这个程序,初始进程将数字发送给孩子,然后孩子用数字执行某些操作并将它们发送给下一个孩子...... 我的问题是程序必须从两(2)开始发送数字,孩子得到的第一个数字是3.问题是什么?

这是我的代码:

void start(int num_of_nums){
if (num_of_nums <= 0) return;
int pipefd[2];
pid_t cpid;

int pipe_res = pipe(pipefd);
if (pipe_res == -1) {
    printf("pipe error in start\n");
    perror("pipe error");
    exit(EXIT_FAILURE);
}

//create a new process
cpid = fork();

if (cpid == -1) {
    printf("fork error in start\n");
    perror("fork error");
    exit(EXIT_FAILURE);
}
if (cpid == 0) {    // child
    printf("child in start\n");
    close(pipefd[1]); // close write end
    int num_from_parent = pipefd[0]; //where the number is read
    printf("num from parent is %d\n", num_from_parent); //prints out 3...
    filter(num_from_parent);
} else {            // parent 
    printf("parent in start\n");
    close(pipefd[0]);          // close read end 
    for (int i = 2; i <= num_of_nums + 1; i++){
        write(pipefd[1], &i, sizeof(int)); //WHERE THE NUMBERS ARE SENT
    }
    close(pipefd[1]);
}

} 非常感谢帮助...

0 个答案:

没有答案