5.1 用setvbuf实现setbuf
#include "apue.h"
char buf[BUFSIZ];
void my_setbuf(FILE* fp,char *buf);
int main()
{
my_setbuf(stdout,buf);
puts("this is a test\n");
puts(buf);
fflush(stdout);
puts(buf);
return 0;
}
void my_setbuf(FILE* fp,char *buf)
{
if(buf==NULL)
{
if(setvbuf(fp,buf,_IONBF,BUFSIZ)!=0)
err_sys("setvbuf error!\n");
printf("no buff\n");
}
else
{
if(fp==stderr)
{
if(setvbuf(fp,buf,_IONBF,BUFSIZ)!=0)
err_sys("setvbuf error\n");
printf("no buf\n");
}
else if((fp==stdout)||(fp==stdin))
{
if(setvbuf(fp,buf,_IOLBF,BUFSIZ)!=0)
err_sys("setvbuf error\n");
printf("line buff\n");
}
else
{
if(setvbuf(fp,buf,_IOFBF,BUFSIZ)!=0)
err_sys("setvbuf error\n");
printf("full buff\n