为什么';这个C代码(写入unix管道)是否会无限迭代?
有人问我将发生多少次迭代(在第二个while循环中)。我的答案是无限的,但当我运行这段代码时,它进行了10912次迭代,程序简单地停止打印(但它似乎没有结束,因为我仍然需要按ctrl+c退出它) 为什么会这样?我找不到那个数字是任何东西的极限/最大值为什么';这个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
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()