묻공러
[C] 버퍼, 버퍼링
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (535) N
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • C# (20)
      • [루키스] C# (9)
      • [루키스] 자료구조 (3)
      • [루키스] 실전 문법 (8)
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 - 언리얼 (123)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
    • 게임 엔진 - 유니티 (28) N
      • [최적화] 유니티 (4)
      • [루키스] 유니티 (24) N
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
C/[코드조선] C 핵심

[C] 버퍼, 버퍼링

2024. 2. 13. 12:20

버퍼, 버퍼링
버퍼는 경계선을 넘어서 데이터를 주고 받을 때 데이터를 주고 받는 것 자체가

(여기서 경계선이란 컴퓨터와 인터넷의 사이를 의미한다)
로컬 PC에서 주고 받는 것과 비교했을 때 현저하게 느리다


따라서 한 번 보낼 때 한꺼번에 최대한 많이 보내는 것이,

한 번 받을 때도 한꺼번에 최대한 많이 받는것이 효율적이다


즉, 버퍼 개념을 통해 쌓아두었다가 보낼 수 있을 때 최대한 많이 보내는 것이다
이를 무선 공유기에서는 버퍼의 크기를 직접 설정할 수도 있다

 

#include <stdio.h>
#include <string.h>

#define BUFFER_LENGTH (32)

static size_t s_buffer_index = 0u;
static char s_buffer[BUFFER_LENGTH];

void buffered_print(const char* str);

int main(void)
{
    buffered_print("Hello, ");
    buffered_print("world! ");
    buffered_print("C is awesome! ");
    buffered_print("Java is awesome too! ");
    buffered_print("is C++ better? ");

    return 0;
}

#define BUFFER_LENGTH (32)

static size_t s_buffer_index = 0u;
static char s_buffer[BUFFER_LENGTH];

void buffered_print(const char* str)
{
    size_t num_left;
    const char* temp_ptr = str;

    num_left = strlen(str);

    while (num_left > 0) 
    {
        /* copy_count: 이번 반복에서 출력할 갯수 */
        size_t copy_count = BUFFER_LENGTH - s_buffer_index - 1;
        /* buffer_empty: 버퍼가 비었는지 안비었는지 */
        const int buffer_empty = s_buffer_index == 0;

        if (num_left < copy_count) 
        {
            /* 남은 글자가 이번에 출력할 갯수보다 작으면 그냥 대입. */
            /* 아니면 그냥 최대한 출력. */
            copy_count = num_left;
        }

        /* 방금 계산한 갯수만큼 조정 */
        s_buffer_index += copy_count;
        num_left -= copy_count;

        if (buffer_empty) 
        {
            /* 버퍼가 비어 있다면 그대로 복사 */
            strncpy(s_buffer, temp_ptr, copy_count);
            s_buffer[s_buffer_index] = '\0';
        } 
        else 
        {
            /* 버퍼에 뭔가 있다면 이어붙이기 */
            strncat(s_buffer, temp_ptr, copy_count);
        }

        temp_ptr += copy_count;

        if (s_buffer_index == BUFFER_LENGTH - 1) 
        {
            /* 꽉 차면 출력하고 비우기 */
            printf("%s\n", s_buffer);
            s_buffer_index = 0u;
        }

    }

    return;
}

 

저작자표시 비영리 변경금지 (새창열림)

'C > [코드조선] C 핵심' 카테고리의 다른 글

[C] 비트필드와 비트플래그  (0) 2024.02.14
[C] 바이트 정렬  (0) 2024.02.13
[C] 구조체 복사  (0) 2024.02.12
[C] typedef  (0) 2024.02.12
[C] 동적 할당  (0) 2024.02.11
'C/[코드조선] C 핵심' 카테고리의 다른 글
  • [C] 비트필드와 비트플래그
  • [C] 바이트 정렬
  • [C] 구조체 복사
  • [C] typedef
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.