加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Advanced Programming in UNIX Environment Episode 23

发布时间:2020-12-15 20:05:06 所属栏目:安全 来源:网络整理
导读:#include "apue.h" int main( void ){ FILE *fp; fputs( "enter any charactern" , stdout ); if(getchar()==EOF) err_sys( "getchar error" ); fputs( "one line to standard errorn" , stderr ); pr_stdio( "stdin" , stdin ); pr_stdio( "stdout" , std
#include "apue.h"

int main(void)
{
    FILE *fp;

    fputs("enter any charactern",stdout);
    if(getchar()==EOF)
        err_sys("getchar error");
    fputs("one line to standard errorn",stderr);

    pr_stdio("stdin",stdin);
    pr_stdio("stdout",stdout);
    pr_stdio("stderr",stderr);

    if((fp==fopen("/etc/passswd","r"))==NULL)
        err_sys("fopen error");
    if(getc(fp)==EOF)
        err_sys("getc error");
    pr_stdio("/etc/passwd",fp);
    return 0;
}

void pr_stdio(const char *name, FILE *fp)
{
    printf("stream = %s,",name);
    if(is_unbuffered(fp))
        printf("unbuffered");
    else if(is_linebuffered(fp))
        printf("line buffered");
    else
        printf("fully buffered");
    printf(",buffer size= %d n",buffer_size(fp));
}

#if defined(_IO_UNBUFFERED)

int is_unbuffered(FILE *fp)
{
    return (fp->_flags&_IO_UNBUFFERED);
}

int is_linebuffered(FILE *fp)
{
    return (fp->_flags&_IO_LINE_BUF);
}

int buffer_size(FILE *fp)
{
    return (fp->_IO_buf_end - fp->_IO_buf_base);
}

#elif defined(__SNBF)

int is_unbuffered(FILE* fp)
{
    return (fp->_flags &__SNBF);
}

int is_linebuffered(FILE *fp)
{
    return (fp->_flags &__SLBF);
}

int buffer_size(FILE *fp)
{
    return (fp->_bf._size);
}

#elif defined(_IONBF)

#ifdef _LP64

#define _flag __pad[4]
#define _ptr __pad[1]
#define _base __pad[2]
#endif

int is_unbuffered(FILE *fp)
{
    return (fp->_flag&_IONBF);
}

int is_linebuffered(FILE *fp)
{
    return (fp->_flag&_IOLBF);
}

int buffer_size(FILE *fp)
{
#ifdef _LP64
    return (fp->_base - fp->_ptr);
#else
    return (BUFSIZ);
#endif
}

#else

#error unknown stdio implementation!

#endif

各个标准I/O流打印缓冲状态信息

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读