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("clos