3

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

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

4

2 回答 2

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);

它等效于使用mode 和sizesetvbuf的值调用的函数,或者(如果是空指针)使用mode 的值。_IOFBFBUFSIZbuf_IONBF

于 2013-09-23T07:04:27.313 回答
2

看看 gnulib 中的 fbufmode() ,它试图以便携的方式做到这一点

于 2015-06-24T02:12:25.403 回答