题目
用setvbuf实现setbuf。
标准库原型
#include <stdio.h>
void setbuf(FILE *restrict fp, char* restrict buf);
int setvbuf(FILE *restrict fp, char* restrict buf, int mode, size_t size);
// 返回值:成功,返回0;否则,返回非0.
思路
考虑缓存的三种类型:
- 不带缓存:buf为空或fp为stderr
- 行缓存:fp为stdin和stdout
- 全缓存:其他情况
实现
#include "apue.h"
/*
apue prictise 5-1
用setvbuf实现setbuf;
*/
void setbuf_test(FILE* restrict fp, char* restrict buf)
{
if(fp==stderr || buf == NULL)
{
if(0!=setvbuf(fp,buf,_IONBF,BUFSIZ))
{
perror("setvbuf error.");
exit(-1);
}
printf("no bufn");
}else{
if(fp == stdin ||fp=stdout)
{
if(0!=setvbuf(fp,buf,_IOLBF,BUFSIZ)){
perror("setvbuf error");
exit(-1);
}
printf("line buffn");
}else{
if(0!=setvbuf(fp,buf,_IOFBF,BUFSIZ)){
perror("setvbuf error");
exit(-1);
}
printf("Fill buffn");
}
}
}
近期评论