与sleep()结合使用时,管道无法正常工作

时间:2014-03-06 03:37:41

标签: c pipe

我有一个像这样的代码片段(测试代码,所以不要太在意这个样式):

int main() {
    int fd[2];
    pipe(fd);
    int id = fork();

    if (id > 0) {
        char *line = "apple";
        close(fd[0]);
        for (;;) {
            int written;
            if (written = write(fd[1], line, 7) == -1) {
                break;
            }
            printf("written %d\n", written);
            sleep(1);
        }
        close(fd[1]);
    }
    else {
        char line[10];
        close(fd[1]);
        int raed;
        while (raed = read(fd[0], line, 10) > 0) {
            printf(line);
        }
        printf("read %d\n", raed);
        close(fd[0]);
    }
    return 0;
}

它保持打印"写0"。但是,如果我注释掉sleep(1),它仍然会打印"写0"但是会有" apple"打印。我不知道发生了什么。为什么我不能保留sleep(1)并让它每1秒打印一次?为什么写0而不是6?

1 个答案:

答案 0 :(得分:0)

if (written = write(fd[1], line, 7) == -1)

使用if ((written = write(fd[1], line, 7)) == -1)

时出错

大多数时候,程序员经常忘记这一点......