温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

[Linux流操作]查看三种标准流的缓冲方式

发布时间:2020-07-05 23:22:20 来源:网络 阅读:623 作者:银河星君 栏目:编程语言
#include <stdio.h>
#include <stdlib.h>
#if defined(MACOS)
#define _IO_UNBUFFERED  __SNBF
#define _IO_LINE_BUF    __SLBF
#define _IO_file_flags  _flags
#define BUFFERSZ(fp)    (fp)->_bf._size
#else
#define BUFFERSZ(fp)    ((fp)->_IO_buf_end - (fp)->_IO_buf_base)
#endif
void    pr_stdio(const char *, FILE *);
int main(void)
{
        FILE    *fp;
        printf("pls enter some str\n");  //提示输入部分字符
        if (getchar() == EOF)   //如果EOF错误
        {
                perror("getchar error");
        }
        fputs("one line to standard error\n", stderr);

        pr_stdio("stdin",  stdin);
        pr_stdio("stdout", stdout);
        pr_stdio("stderr", stderr);   //输出相应的缓冲类型
                perror("fopen error");
        if (getc(fp) == EOF)
                perror("getc error");
        pr_stdio("/etc/motd", fp);
        exit(0);
}
//缓冲输出函数
void  pr_stdio(const char *name, FILE *fp)
{   
        printf("stream = %s, ", name);   //打印缓冲名称
        if (fp->_IO_file_flags & _IO_UNBUFFERED)
                printf("unbuffered");
        else if (fp->_IO_file_flags & _IO_LINE_BUF)
                printf("line buffered");
        else /* if neither of above */
                printf("fully buffered");
        printf(", buffer size = %ld\n", BUFFERSZ(fp));
}



//这是一个分别打印三个标准流和一个文件流
//的缓冲方式的应用实例
#include <stdio.h>
#include <stdlib.h>

#if defined(MACOS)
#define _IO_UNBUFFERED  __SNBF
#define _IO_LINE_BUF    __SLBF
#define _IO_file_flags  _flags
#define BUFFERSZ(fp)    (fp)->_bf._size
#else
#define BUFFERSZ(fp)    ((fp)->_IO_buf_end - (fp)->_IO_buf_base)
#endif
//以上是关于缓冲方式和缓冲区大小的预定义
void pr_stdio(const char *, FILE *);
//子函数声明
int main(int argc,char *argv[])
{
  FILE  *fp;   //流文件结构指针
  pr_stdio("stdin",  stdin);    //标准输入
  pr_stdio("stdout", stdout);   //标准输出
  pr_stdio("stderr", stderr);   //标准出错处理
  printf("fopen error");
  if (getc(fp) == EOF)
  {
    printf("getc error\n");
  }      
  return 0;
}
//测试缓冲输出函数
void  pr_stdio(const char *name, FILE *fp)
{   
  printf("当前流是%s, ", name);   //打印流的名称
  if (fp->_IO_file_flags & _IO_UNBUFFERED)
  {
    printf("无缓冲\n");
  }
  else if (fp->_IO_file_flags & _IO_LINE_BUF)
  {
    printf("行缓冲\n");
  }
  else
  { 
    printf("全缓冲\n");
  }
  printf(", 缓冲区大小 = %ld\n", BUFFERSZ(fp));
  return;
}


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI