Ocean_
꾸준한 프로그래밍
Ocean_
전체 방문자
오늘
어제
  • 분류 전체보기 (174)
    • About Me (4)
    • 우아한테크코스 (27)
    • C & LINUX (50)
    • Operating System (12)
    • Database (25)
    • Computer Vision (0)
    • Problem Solving (0)
      • Programmers (0)
      • BOJ (0)
    • 코코코딩공부 (44)
      • Spring (12)
      • JAVA (14)
      • 디자인 패턴 (4)
      • 책 읽기 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • DB
  • 리눅스
  • Operating System
  • 인덱스
  • 우테코5기
  • 블랙잭
  • 트랜잭션
  • 우테코
  • C
  • signal
  • OperatingSystem
  • 데이터 조작어
  • 원시값 포장
  • 자바
  • Spring
  • SIGINT
  • 프로세스
  • bean
  • 백준
  • Linux
  • C++
  • 우아한테크코스
  • 우아한테크코스5기
  • 운영체제
  • 1259
  • 우테코 체스
  • BOJ
  • 우아한형제들
  • 정규화
  • OS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Ocean_

꾸준한 프로그래밍

C / LINUX setbuf(3) setvbuf(3)
C & LINUX

C / LINUX setbuf(3) setvbuf(3)

2022. 5. 1. 17:22

함수 기능

파일의 버퍼를 바꿔주는 함수

 

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
    'C & LINUX' 카테고리의 다른 글
    • C / LINUX dup() dup2()
    • C / LINUX write()
    • C / LINUX ungetc(3)
    • C / LINUX getc(3) fgetc(3) getchar(3)
    Ocean_
    Ocean_
    dongVeloper

    티스토리툴바