Unix高级编程 使用setvbuf实现setbuf
来源:互联网 发布:程序员简历下载 编辑:程序博客网 时间:2024/05/16 17:53
setbuf的关键在于所涉及的流类型,如普通文件,pipe,socket等。
此处,我的默认处理:
1.若流为pipe,socket,字符设备和块设备,采用行缓冲
2.若流为stderr,采用不带缓冲
3.其他为全缓冲
(此处的分类尚需细分,欢迎改正)
所以代码以及测试代码如下:
#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>//#define error(str) printf("%s",str)void set_buf(FILE *stream,char *buf);int main(){ FILE *fp=fopen("input.txt","wb+"); char buf[BUFSIZ]; printf("%d",BUFSIZ); set_buf(fp,buf); set_buf(stderr,buf); set_buf(stdin,buf); set_buf(stdout,buf); sleep(100);}void set_buf(FILE *stream ,char *buf){ struct stat st; if(stream==NULL) error("stream is NULL"); if(buf==NULL) { fclose(stream); error("close stream"); } int file=fileno(stream); if(-1==fstat(file,&st)) { printf("fstat error:%s\n",strerror(errno)); } int length=strlen(buf); if(stream==stderr) { if(0!=setvbuf(stream,buf,_IONBF,length))printf("servbuf error:%s\n",strerror(errno)); else{ printf("NOBUF OK\n");} } else if(S_ISFIFO(st.st_mode)||S_ISSOCK(st.st_mode)||S_ISCHR(st.st_mode)||S_ISBLK(st.st_mode)) { if(0!=setvbuf(stream,buf,_IOLBF,length))printf("servbuf error:%s\n",strerror(errno)); else{ printf("Line BUF OK\n");} } else { if(0!=setvbuf(stream,buf,_IOFBF,length))printf("servbuf error:%s\n",strerror(errno)); else{ printf("Full BUF OK\n");} }}
0 0
- Unix高级编程 使用setvbuf实现setbuf
- 用setvbuf 实现setbuf
- setvbuf实现setbuf
- setbuf、setvbuf
- apue 习题5.1 用setvbuf实现setbuf
- setbuf 和setvbuf 简单介绍
- setbuf setvbuf函数的理解(转)
- I\O操作之setbuf、setvbuf
- setbuf和setvbuf两函数学习记录
- setbuf, setbuffer, setlinebuf, setvbuf - 流缓冲操作
- C小程序 - setbuf和setvbuf
- 2.Unix高级编程-----ls的实现
- 高级UNIX编程 的源文件使用
- 使用APUE源代码(UNIX高级编程)
- 《UNIX环境高级编程》笔记--UNIX标准化及实现
- 《UNIX环境高级编程》——UNIX标准及实现
- 《UNIX环境高级编程》---2 UNIX标准及实现
- 《UNIX环境高级编程》笔记2--UNIX标准化及实现
- MySQL基本操作命令
- 【android自定义控件】LinearLayout定义ActionBar样式
- vector
- memcached window版服务器端安装
- CF 439D(251D题)Devu and his Brother
- Unix高级编程 使用setvbuf实现setbuf
- C文件流操作的fread和fseek
- Texture类学习
- Linux性能分析2
- android最全的面试题
- 栈的实现:链式栈
- FZU2168 防守阵地 I
- thrift之TTransport类体系原理及源码详细解析1-类结构和抽象基类
- DECLARE_GLOBAL_DATA_PTR的含义