是否有可移植的方法来检索流使用的缓冲区大小?
在线搜索帖子,我发现glibc
有一个方法:
size_t __fbufsize (FILE *stream)
然而,这只有在我使用glibc时才有效。
似乎另一种选择是使用宏BUFSIZ
以及标记_IONBF
和_IOLBF
:
void print_buffering(FILE * fp)
{
if (fp->_flags & _IONBF)
{
printf("No buffering\n");
}
else if (fp->_flags & _IOLBF)
{
printf("Line buffering - buffer size: %d\n", BUFSIZ);
}
else
{
printf("Full buffering - buffer size: %d\n", BUFSIZ);
}
}
依赖BUFSIZ
表明缓冲区大小始终是常量。总是这样吗?
答案 0 :(得分:3)
依赖
BUFSIZ
表明缓冲区大小始终是常量。总是这样吗?
不,不是。
致电setvbuf
int setvbuf(FILE * restrict stream, char * restrict buf, int mode, size_t size);
您可以自己选择size
的值。 (尽管您可以选择使用BUFSIZE
)宏BUFSIZE
仅在您致电setbuf
void setbuf(FILE * restrict stream, char * restrict buf);
它相当于setvbuf
函数调用模式的值_IOFBF
和大小的BUFSIZ
,或者(如果buf
是空指针),模式的值_IONBF
。
答案 1 :(得分:2)
从gnulib看看fbufmode()尝试以此方式移植