본문 바로가기

C언어

setbuf,setvbuf

C언어 setbuf, setvbuf


Setbuf - void setbuf (FILE * stream, char *buffer);


Setbuf라는 함수는 파일 포인터를 buf만큼 사용해 준다는 의미입니다.

예로 

char buf[BUFSIZ];

setbuf('파일이름',buf);

이런식으로 되어있으면 BUFSIZ는 512사이즈이다. 따라서 파일 포인터를 512만큼 사용하겠다는 의미입니다.

setbuf('파일',NULL); 이런식으로 되어있으면 함수 내부에서 필요한만큼 크기를 할당해서 사용합니다.


예제 

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void) {
    char buf[BUFSIZ];
    FILE *fp = fopen("test.txt""w");
    setbuf(fp, buf); //파일 포인터를 버퍼만큼 사용
    fputc('\n', fp); //파일포인터에 값을 넣음
 
    fclose(fp); //파일닫기
    return 0;
}
cs


Setvbuf - int setvbuf(FILE * stream, char * buffer, int mode,size_t size);

Setbuf에서 인자로 받는 것이 달라지고 반환하는 타입도 달라졌습니다.

먼저 앞서 받는 인자는 다 같고 int mode와 size_t size가 추가되었는데

3번째로 할당받는것은 파일 버퍼링의 형식을 지정하는 것입니다.

_IOFBF - 완전한 버퍼링

_IOLBF - 행 버퍼링: 출력시, 버퍼가 채워지거나 스트림에 개행문자(\n)가 입력되면 버퍼에서 출력됩니다.

_IONBF - 버퍼링 사용안함: 버퍼를 사용하지않는 형식입니다.

그리고 마지막으로 사이즈는 바이트 단위로 넣습니다. 그리고 사이즈를 할당합니다.


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* 
파일을 _IOFBF 형식으로 열며, 버퍼는 크기가 1024 바이트로 컴퓨터가 자동으로 할당하게 한다. 
이 예제는 http://www.cplusplus.com/reference/clibrary/cstdio/setvbuf/
에서 가져왔습니다. 
 */
#include <stdio.h>
int main ()
{
    FILE *pFile;
    pFile=fopen ("myfile.txt","w");
    setvbuf ( pFile , NULL , _IOFBF , 1024 );
 
    /* 여러 파일 입출력 작업들 */
 
    fclose (pFile);
 
    return 0;
}
cs


<위의 개념들은 http://itguru.tistory.com/62과 스무디라는 유투브의 채널을 보고 공부해서 올렸습니다.>

'C언어' 카테고리의 다른 글

stdio.h 3번째  (0) 2018.06.12
stdio.h 2편  (0) 2018.06.11
stdlib.h 1  (0) 2018.06.11
rand함수 사용하기  (0) 2018.06.11
C언어 stdio.h 파일 1편  (0) 2018.06.05