[Linux流操作]查看三种标准流的缓冲方式
2017-11-18 17:20
288 查看
#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; }
相关文章推荐
- Linux字符设备驱动对IO操作有三种方式
- windows系统中查看linux分区的三种方式
- 双系统中windows查看linux分区的三种方式
- linux查看磁盘io的三种方式
- linux中查看命令的三种方式--help, man, info的区别
- Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
- 在spring容器中定义初始化和销毁bean前所做的操作,有三种方式
- Linux查看谁操作了什么
- linux中RamDisk的三种实现方式
- Linux下查看用户登陆后的操作记录
- Linux中设置服务自启动的三种方式
- JDBC操作数据库的三种方式比较
- Linux下重要日志文件及查看方式(3)
- Linux下查看用户登陆后的操作记录
- linux下查看tcp连接的几种方式
- Linux 下 ascii 的查看方式
- Linux中设置服务自启动的三种方式
- 查看linux版本的三种常用方法
- linux查看系统的日志的一些实用操作
- Linux下查看/管理当前登录用户及用户操作历史记录