在什么情况下缓冲区变满
In which condition the buffer get full
我正在阅读有关流和缓冲区的内容。
我知道如果流是 line buffered 那么每当遇到换行符时,缓冲区的累积字符就会从块中传输。
并且如果流是 无缓冲的 则字符将尽快从源出现或出现在目的地而不存储在缓冲区中。
但是如果流完全缓冲那么缓冲区的累积字符将以块的形式传输只要缓冲区完全填满 .
现在我无法理解缓冲区在什么情况下会被完全填满。
C 标准没有明确指定流缓冲的细节,但通常流具有固定大小的缓冲区。这只是一个用于保存流数据的字节数组。
很简单,当自上次刷新缓冲区以来写入流的字节数等于缓冲区中的字节数时,缓冲区已完全填满。
当包含 <stdio.h>
时,它定义了一个宏 BUFSIZ
,它提供 setbuf
使用的缓冲区的大小。您可以使用 printf("%d\n", BUFSIZ);
打印它。据推测这是流缓冲区的默认大小,尽管 C 标准没有明确说明这一点。 (它说这是 setbuf
函数使用的缓冲区的大小,它允许您为缓冲区提供自己的内存。)
您还可以使用较新的 setvbuf
请求不同大小的缓冲区。 setbuf
和 setvbuf
都必须仅在流打开之后和任何其他操作之前使用。
我正在阅读有关流和缓冲区的内容。 我知道如果流是 line buffered 那么每当遇到换行符时,缓冲区的累积字符就会从块中传输。 并且如果流是 无缓冲的 则字符将尽快从源出现或出现在目的地而不存储在缓冲区中。
但是如果流完全缓冲那么缓冲区的累积字符将以块的形式传输只要缓冲区完全填满 . 现在我无法理解缓冲区在什么情况下会被完全填满。
C 标准没有明确指定流缓冲的细节,但通常流具有固定大小的缓冲区。这只是一个用于保存流数据的字节数组。
很简单,当自上次刷新缓冲区以来写入流的字节数等于缓冲区中的字节数时,缓冲区已完全填满。
当包含 <stdio.h>
时,它定义了一个宏 BUFSIZ
,它提供 setbuf
使用的缓冲区的大小。您可以使用 printf("%d\n", BUFSIZ);
打印它。据推测这是流缓冲区的默认大小,尽管 C 标准没有明确说明这一点。 (它说这是 setbuf
函数使用的缓冲区的大小,它允许您为缓冲区提供自己的内存。)
您还可以使用较新的 setvbuf
请求不同大小的缓冲区。 setbuf
和 setvbuf
都必须仅在流打开之后和任何其他操作之前使用。