#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;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。