为什么';这个C代码(写入unix管道)是否会无限迭代?

为什么';这个C代码(写入unix管道)是否会无限迭代?,c,pipe,C,Pipe,有人问我将发生多少次迭代(在第二个while循环中)。我的答案是无限的,但当我运行这段代码时,它进行了10912次迭代,程序简单地停止打印(但它似乎没有结束,因为我仍然需要按ctrl+c退出它) 为什么会这样?我找不到那个数字是任何东西的极限/最大值 char string [] = “hello”; void main() { char buf[1024]; char *cp1, *cp2; int fds[2]; cp1 = string; cp2

有人问我将发生多少次迭代(在第二个while循环中)。我的答案是无限的,但当我运行这段代码时,它进行了10912次迭代,程序简单地停止打印(但它似乎没有结束,因为我仍然需要按ctrl+c退出它)

为什么会这样?我找不到那个数字是任何东西的极限/最大值

char string [] = “hello”;

void main()
{
    char buf[1024];
    char *cp1, *cp2;
    int fds[2];
    cp1 = string;
    cp2 = buf;
    while (*cp1)
    *cp2++ = *cp1++; 
    pipe(fds);
    int i = 0;
    while(1)
    {
        write(fds[1], buf, 6);
        i++;
        printf("i: %d", i);
    }
}

你在给管道写信,但从不从管道的另一边读。因此,数据进入管道缓冲区,一旦缓冲区满了,任何额外的写入块都会导致程序挂起,因为没有任何东西可以通过从管道读取来解除它的阻塞。在您的系统上,管道缓冲区的大小似乎是64k(65536字节)或稍小,因为它在停止之前成功写入了65472字节。

您可能超过了一些缓冲区,并且它会阻塞,直到有更多的空间。您在另一边有什么东西读取管道吗?如果不是,那么管道有一个内部缓冲区是有意义的,在它为空之前不允许您写入。它应该是
int main()