함수 기능
파일의 버퍼를 바꿔주는 함수
setvbuf
setbuf와 동일하나 버퍼링의 타입과 크기지정가능
함수 원형
#include <stdio.h>
void setbuf(FILE *fp, char *buf);
int setvbuf(FILE *fp, char *buf, int mode, size_t size);
리턴 값 : 성공시 0 에러시 0이아닌값 리턴
함수 파라메터
fp
파일 포인터
buf
버퍼
mode
_IOFBF FULL 버퍼- 입출력이 버퍼 단위로 이루어짐
_IOLBF 라인버퍼- 개행문자를 만날때 마다 버퍼의 내용 출력
_IONBF NON버퍼 - 입출력이 버퍼를 사용하지 않게 됨.
함수 예제
setbuf1
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#define BUFFER_SIZE 1024
int main(void){
char buf[BUFFER_SIZE];
setbuf(stdout,buf);
printf("Hello,");
sleep(1);
printf("OSLAB!!");
sleep(1);
printf("\n");
sleep(1);
setbuf(stdout,NULL);
printf("How");
sleep(1);
printf("are");
sleep(1);
printf("you?");
sleep(1);
printf("\n");
exit(0);
}
setbuf2
#include<stdio.h>
#include<stdlib.h>
#define BUFFER_SIZE 1024
int main(void){
char buf[BUFFER_SIZE];
int a,b;
int i;
setbuf(stdin,buf);
scanf("%d %d",&a,&b);
for(i=0;buf[i] != '\n'; i++){
putchar(buf[i]);
}
putchar('\n');
exit(0);
}
setvbuf
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#define BUFFER_SIZE 1024
void ssu_setbuf(FILE *fp, char *buf);
int main(void){
char buf[BUFFER_SIZE];
char *fname="/dev/pts/1";
FILE *fp;
if((fp=fopen(fname,"w"))==NULL){
fprintf(stderr,"fopen error for %s",fname);
exit(1);
}
ssu_setbuf(fp,buf);
fprintf(fp,"Hello,");
sleep(1);
fprintf(fp,"UNIX!!");
sleep(1);
fprintf(fp,"\n");
sleep(1);
ssu_setbuf(fp,NULL);
fprintf(fp,"HOW");
sleep(1);
fprintf(fp,"ARE");
sleep(1);
fprintf(fp,"YOU?");
sleep(1);
fprintf(fp,"\n");
sleep(1);
exit(0);
}
void ssu_setbuf(FILE *fp, char *buf){
size_t size;
int fd;
int mode;
fd =fileno(fp);
if(isatty(fd))
mode =_IOLBF;
else
mode=_IOFBF;
if(buf==NULL){
mode=_IONBF;
size=0;
}
else
size=BUFFER_SIZE;
setvbuf(fp,buf,mode,size);
}
함수 결과
setbuf1
setbuf2
setvbuf
리눅스시스템 프로그래밍 - 홍지만 저
교재 내에 있는 예제를 바탕으로 작성한 글 입니다.
'C & LINUX' 카테고리의 다른 글
C / LINUX dup() dup2() (0) | 2022.05.01 |
---|---|
C / LINUX write() (0) | 2022.05.01 |
C / LINUX ungetc(3) (0) | 2022.05.01 |
C / LINUX getc(3) fgetc(3) getchar(3) (0) | 2022.05.01 |
C / LINUX fputs(3) puts(3) (0) | 2022.05.01 |