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 |