是否有一种便携式方法来检索流使用的缓冲区大小?
在线搜索帖子,我发现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
表明缓冲区大小将始终是一个常数。总是这样吗?
依靠
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
mode和BUFSIZ
size的值或(如果buf
是空指针)使用mode的值调用的函数_IONBF
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句