从C中读取管道跳过值的整数

时间:2015-05-02 10:51:34

标签: c pipe

我试图了解C管道的工作原理。 我的父进程生成从1到10的整数,并将它们写入管道。我的子进程必须读取管道并将值打印到屏幕。父亲等待终止孩子并退出。容易,对吗?这是我的代码:

// assuming you have defined mySelect before!
mySelect[selArray[i]].text

我不明白为什么作为输出我收到以下内容:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>

#define WRITE 1
#define READ  0
#define N     10

int main(void)
{
    pid_t pid;
    int B0[2];
    int num, status, i;

    pipe(B0);

    pid = fork();
    if (pid > 0){
        /*P0*/
            close(B0[READ]);
            for (i=1; i<=N; i++){
                num = i;
                write(B0[WRITE],&num,sizeof(num));
                printf("P0: written %d\n", num);
            }
            close(B0[WRITE]);

            wait(&status);
            exit(EXIT_SUCCESS);
    }
    else if (pid == 0){
        /*P1*/
        close(B0[WRITE]);
        do{
            if (read(B0[READ],&num,sizeof(num)) != -1)
                printf("P1: read %d from pipe B0\n", num);
            else
                printf("read: %s\n", strerror(errno));
        } while(read(B0[READ],&num,sizeof(num)) != 0);
        exit(EXIT_SUCCESS);
    }
}

无论我在管道中写入的整数序列如何,我的read()都会跳过每个第2个值。在将值写入管道时,我试图睡觉(1),但结果是一样的。我错过了什么,但我不知道什么。 发生了什么?

0 个答案:

没有答案