如何轻松获取文件流的缓冲区大小?

时间:2013-09-23 06:50:19

标签: c stdio

是否有可移植的方法来检索流使用的缓冲区大小?

在线搜索帖子,我发现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表明缓冲区大小始终是常量。总是这样吗?

2 个答案:

答案 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()尝试以此方式移植

相关问题