rosieblue
article thumbnail
728x90

 

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

stream์„ buffer๋งŒํผ ์‚ฌ์šฉํ•ด์ค€๋‹ค๋Š” ์˜๋ฏธ

์ง€์ •ํ•ด์ค€ buffer๋Š” ์ž…์ถœ๋ ฅ ๋ฒ„ํผ๋กœ ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค.

๋ฒ„ํผ์ž์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ฏ€๋กœ ๋ฒ„ํผ์—๋Š” ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค. (??)

stream
  • 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
profile

rosieblue

@Rosieblue

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!