void setbuf (FILE * stream, char *buffer);
stream์ buffer๋งํผ ์ฌ์ฉํด์ค๋ค๋ ์๋ฏธ
์ง์ ํด์ค buffer๋ ์ ์ถ๋ ฅ ๋ฒํผ๋ก ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ์ด๋ค.
๋ฒํผ์์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์๋๋ฏ๋ก ๋ฒํผ์๋ ์๋ฌด๋ฐ ๋ณํ๊ฐ ์๋ค. (??)
- stdin(ํ์ค์ ๋ ฅ, 0)
- stdout(ํ์ค์ถ๋ ฅ, 1)
- stderr(ํ์ค์๋ฌ, 2)
char buf[512];
setbuf('ํ์ผ์ด๋ฆ',buf); ์ด๋ฉด
ํ์ผ ํฌ์ธํฐ๋ฅผ 512byte๋งํผ ์ฌ์ฉํ๊ฒ ๋ค๋ ์๋ฏธ!!
setbuf('ํ์ผ',NULL); ์ด๋ฐ์์ผ๋ก ๋์ด์์ผ๋ฉด ํจ์ ๋ด๋ถ์์ ํ์ํ๋งํผ ํฌ๊ธฐ๋ฅผ ํ ๋นํด์ ์ฌ์ฉ!!
์์ 1)
#include <stdio.h>
int main(void) {
char buf[512];
FILE *fp = fopen("test.txt", "w");
setbuf(fp, buf); //ํ์ผ ํฌ์ธํฐ๋ฅผ ๋ฒํผ๋งํผ ์ฌ์ฉ
fputc('\n', fp); //ํ์ผํฌ์ธํฐ์ ๊ฐ์ ๋ฃ์
fclose(fp); //ํ์ผ๋ซ๊ธฐ
return 0;
}
์์ 2)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
char buf[BUFSIZ];
int a, b;
// buf ๋ฅผ ํ์ค ์
๋ ฅ์ ๋ฒํผ๋ก ์ง์
// ํฐ๋ฏธ๋์ด๋ฏ๋ก Line buffer ๋ก ์ค์ ๋จ
setbuf(stdin, buf);
scanf("%d %d", &a, &b);
// ์๋ก์ด ๋ฒํผ๋ก ์ง์ ๋ buf๋ฅผ ์ถ๋ ฅ
for (int i = 0; buf[i] != '\n'; i++)
putchar(buf[i]);
putchar('\n');
exit(0);
}
/*
===์
๋ ฅ====
10 20
===๊ฒฐ๊ณผ====
10 20
*/
setbuf๋ stream์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฑด๋๋๊ฒ ์๋๋ผ buffer๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ง์ ๋ํ ํจ์!!
int setvbuf(FILE * stream, char * buffer, int mode,size_t size);
setbuf์์ int mode์ size_t size๊ฐ ์ถ๊ฐ๋จ!
size๋ ๋ฒํผ์ ํฌ๊ธฐ ์๋ฏธ (ex 512byte)
mode๋ ๋ฒํผ๋ง ๋ฐฉ์ ์๋ฏธ (์๋์ ๊ฐ์)
- _IOFBF(0) - ์์ ํ ๋ฒํผ๋ง
- _IOLBF(1) - ํ ๋ฒํผ๋ง: ์ถ๋ ฅ์, ๋ฒํผ๊ฐ ์ฑ์์ง๊ฑฐ๋ ์คํธ๋ฆผ์ ๊ฐํ๋ฌธ์(\n)๊ฐ ์ ๋ ฅ๋๋ฉด ๋ฒํผ์์ ์ถ๋ ฅ
- _IONBF(2) - ๋ฒํผ๋ง ์ฌ์ฉ์ํจ: ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ง์๋ ํ์์ ๋๋ค.
์ฑ๊ณตํ๋ฉด 0 return
์์ 3)
/*
ํ์ผ์ _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;
}
References
https://chp747.tistory.com/162
์ ์ถ๋ ฅ ๋ฒํผ ์ฌ์ฉํ๊ธฐ
๋ฒํผ(buffer)๋? ํํ ์ฐ๋ฆฌ๊ฐ ๋ณ์๋ก ์ฌ์ฉํ๋ buffer์ origin์ธ๋ฐ, ์ค์ ๋ฐ์ดํฐ๊ฐ ์คํ ํจ์์ ์ํด ์ ์ถ๋ ฅ์ ์งํํ ๋, ๋ฐ๋ก ์ ๋ ฅ ํน์ ์ถ๋ ฅ์ด ๋๋ ๊ฒ์ด ์๋๋ผ ๋ฒํผ(buffer)๋ผ๋ ๊ณต๊ฐ์ ์ ์ฅ์ด ๋
chp747.tistory.com
https://juns0208.tistory.com/31
setbuf,setvbuf
C์ธ์ด setbuf, setvbuf Setbuf - void setbuf (FILE * stream, char *buffer); Setbuf๋ผ๋ ํจ์๋ ํ์ผ ํฌ์ธํฐ๋ฅผ buf๋งํผ ์ฌ์ฉํด ์ค๋ค๋ ์๋ฏธ์ ๋๋ค.์๋ก char buf[BUFSIZ];setbuf('ํ์ผ์ด๋ฆ',buf);์ด๋ฐ์์ผ๋ก ๋์ด์์ผ๋ฉด BUFSIZ
juns0208.tistory.com
https://league-cat.tistory.com/26
C - setbuf ํจ์[setbuf()]
setbuf ํจ์์ ๋ํด์ ์์๋ณด๋๋ก ํ์. ์ ์ธ ๋ฐํ ๊ฐ ์์ ์ ๋ ฅ ๊ฐ FILE* _File : ๋ฆฌ๋ค์ด๋ ์ ํ ํ์ผ ํฌ์ธํฐchar* _Buffer : ๋ฆฌ๋ค์ด๋ ์ ํ ๋ฒํผ ์ค๋ช ํ์ผ ํฌ์ธํฐ๋ฅผ ์ง์ ๋ ๋ฒํผ์ ํฌ๊ธฐ๋งํผ ๋ฆฌ๋ค์ด๋ ์ ํด
league-cat.tistory.com
https://bubble-dev.tistory.com/entry/CC-setbuf3-setvbuf3
C/C++ setbuf(3) setvbuf(3)
ํจ์ ๊ธฐ๋ฅ ํ์ผ์ ๋ฒํผ๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ํจ์์ ๋๋ค. ๋ฒํผ ๋ฐฉ์ ๋ฒํผ ๋ฐฉ์ ๋งคํฌ๋ก ์ค๋ช Full buffer _IOFBF ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐจ์ผ ํ์ผ์ ์ฝ๊ณ ์ฐ๋ ๋ฐฉ์์ผ๋ก ์ฃผ๋ก ์ผ๋ฐ ํ์ผ์ ์ ์ฉ Line buffer _IOLBF ๋ฒํผ์ ๊ฐํ
bubble-dev.tistory.com
'๐ฉโ๐ป Programming & Algorithm > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C] enum(์ด๊ฑฐํ) ์ฌ์ฉํ๊ธฐ (0) | 2023.09.02 |
---|---|
[C/C++] mmap ํจ์ (0) | 2023.04.02 |
[C/C++] What is Pointer? - Pointer and Addresses (0) | 2021.08.20 |