Mediastreamer2 VoIP ์—”์ง„ ํƒ์ƒ‰. 11 ๋ถ€

๊ธ€์˜ ์†Œ์žฌ๋Š” ์ œ ๊ธ€์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ์   ์ฑ„๋„.

Mediastreamer2 VoIP ์—”์ง„ ํƒ์ƒ‰. 11 ๋ถ€

๋ฐ์ดํ„ฐ ์ด๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜

  • ๋ฐ์ดํ„ฐ ๋ธ”๋ก dblk_t
  • ๋ฉ”์‹œ์ง€ mblk_t
  • ๋ฉ”์‹œ์ง€ mblk_t ์ž‘์—…์„ ์œ„ํ•œ ํ•จ์ˆ˜
  • ๋Œ€๊ธฐ์—ด queue_t
  • ๋Œ€๊ธฐ์—ด ์ž‘์—…์„ ์œ„ํ•œ ํ•จ์ˆ˜ queue_t
  • ํ•„ํ„ฐ ์—ฐ๊ฒฐ
  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ทธ๋ž˜ํ”„์˜ ์‹ ํ˜ธ ์ง€์ 
  • ํ‹ฐ์ปค์˜ ํ™œ๋™ ๋น„ํ•˜์ธ๋“œ ์Šคํ† ๋ฆฌ
  • ๋ฒ„ํผ๋ผ์ด์ €(MSBufferizer)
  • MSBufferizer ์ž‘์—…์„ ์œ„ํ•œ ํ•จ์ˆ˜

๊ณผ๊ฑฐ์— ๊ธฐ์‚ฌ ์šฐ๋ฆฌ๋Š” ์ž์ฒด ํ•„ํ„ฐ๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ๋Š” ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ ํ•„ํ„ฐ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™ํ•˜๋Š” ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์ค‘์ ์„ ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚˜์ค‘์— ๋” ์ ์€ ๋…ธ๋ ฅ์œผ๋กœ ์ •๊ตํ•œ ํ•„ํ„ฐ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ด๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜

๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ์˜ ๋ฐ์ดํ„ฐ ์ด๋™์€ ๊ตฌ์กฐ์— ์„ค๋ช…๋œ ๋Œ€๊ธฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. queue_t. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๋ฌธ์ž์—ด mblk_t, ๊ทธ ์ž์ฒด์—๋Š” ์‹ ํ˜ธ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ ์ด์ „, ๋‹ค์Œ ๋ฉ”์‹œ์ง€ ๋ฐ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์—๋งŒ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋‹จ์ผ ๋งํฌ๋œ ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ผํ•œ ์œ ํ˜•์˜ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋งํฌ ํ•„๋“œ๋„ ์žˆ๋‹ค๋Š” ์ ์„ ํŠนํžˆ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋Ÿฌํ•œ ๋ชฉ๋ก์œผ๋กœ ํ†ตํ•ฉ๋œ ๋ฉ”์‹œ์ง€ ๊ทธ๋ฃน์„ ํŠœํ”Œ์ด๋ผ๊ณ  ๋ถ€๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€๊ธฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋Š” ๋‹จ์ผ ๋ฉ”์‹œ์ง€๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mblk_t, ์•„๋งˆ๋„ ๋ฉ”์‹œ์ง€ ํŠœํ”Œ์˜ ํ—ค๋“œ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. mblk_t. ๊ฐ ํŠœํ”Œ ๋ฉ”์‹œ์ง€์—๋Š” ์ž์ฒด ์™€๋“œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠœํ”Œ์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ์ž ์‹œ ํ›„์— ๋…ผ์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ฉ”์‹œ์ง€ ์ž์ฒด์—๋Š” ๋ฐ์ดํ„ฐ ๋ธ”๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ ๋Œ€์‹  ๋ธ”๋ก์ด ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์—์„œ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ ์ž‘์—…์˜ ์ „์ฒด์ ์ธ ๊ทธ๋ฆผ์€ ๋งŒํ™” "๋ชฌ์Šคํ„ฐ ์ฃผ์‹ํšŒ์‚ฌ"์— ๋‚˜์˜ค๋Š” ๋ฌธ ์ฐฝ๊ณ ๋ฅผ ์—ฐ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ(๋ฐ์ดํ„ฐ ๋งํฌ - ๋ฐฉ)์€ ๋จธ๋ฆฌ ์œ„ ์ปจ๋ฒ ์ด์–ด๋ฅผ ๋”ฐ๋ผ ๋ฏธ์นœ ์†๋„๋กœ ์›€์ง์ด๊ณ  ๋ฐฉ ์ž์ฒด๋Š” ๋ฏธ์นœ ์†๋„๋กœ ์›€์ง์ž…๋‹ˆ๋‹ค. ์›€์ง์ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ด์ œ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ ์•„๋ž˜์—์„œ ์œ„๋กœ ์ด๋™ํ•˜๋ฉด์„œ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋‚˜์—ด๋œ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ธ”๋ก dblk_t

๋ฐ์ดํ„ฐ ๋ธ”๋ก์€ ํ—ค๋”์™€ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ—ค๋”๋Š” ๋‹ค์Œ ๊ตฌ์กฐ๋กœ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค.

typedef struct datab
{
unsigned char *db_base; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฝะฐั‡ะฐะปะพ ะฑัƒั„ะตั€ ะดะฐะฝะฝั‹ั….
unsigned char *db_lim;  // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะบะพะฝะตั† ะฑัƒั„ะตั€ ะดะฐะฝะฝั‹ั….
void (*db_freefn)(void*); // ะคัƒะฝะบั†ะธั ะพัะฒะพะฑะพะถะดะตะฝะธั ะฟะฐะผัั‚ะธ ะฟั€ะธ ัƒะดะฐะปะตะฝะธะธ ะฑะปะพะบะฐ.
int db_ref; // ะกั‡ะตั‚ั‡ะธะบ ััั‹ะปะพะบ.
} dblk_t;

๊ตฌ์กฐ์ฒด์˜ ํ•„๋“œ์—๋Š” ๋ฒ„ํผ์˜ ์‹œ์ž‘, ๋ฒ„ํผ์˜ ๋ ๋ฐ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋ฅผ ์‚ญ์ œํ•˜๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ—ค๋”์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ db_ref โ€” ์ฐธ์กฐ ์นด์šดํ„ฐ, 0์— ๋„๋‹ฌํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ด ๋ธ”๋ก์„ ์‚ญ์ œํ•˜๋ผ๋Š” ์‹ ํ˜ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์— ์˜ํ•ด ๋ฐ์ดํ„ฐ ๋ธ”๋ก์ด ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ datab_alloc() , ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋Š” ํ—ค๋” ๋ฐ”๋กœ ๋’ค์— ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒฝ์šฐ์—๋Š” ๋ฒ„ํผ๊ฐ€ ๋ณ„๋„๋กœ ์–ด๋”˜๊ฐ€์— ์œ„์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ฒ„ํผ์—๋Š” ํ•„ํ„ฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๋Š” ์‹ ํ˜ธ ์ƒ˜ํ”Œ์ด๋‚˜ ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ์ƒˆ ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

dblk_t *datab_alloc(int size);

์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ธ”๋ก์ด ์ €์žฅํ•  ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ํ—ค๋”(๊ตฌ์กฐ)๋ฅผ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ ํ•ญ์ƒ ์ด๋Ÿฐ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๊ฐ€ ๋ฐ์ดํ„ฐ ๋ธ”๋ก ํ—ค๋”์™€ ๋ณ„๋„๋กœ ์œ„์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. db_base ๋ฐ์ดํ„ฐ ์˜์—ญ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. db_lim ๋๊นŒ์ง€. ๋งํฌ ์ˆ˜ db_ref 1๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ง€์šฐ๊ธฐ ๊ธฐ๋Šฅ ํฌ์ธํ„ฐ๊ฐ€ 0์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ mblk_t

๋ช…์‹œ๋œ ๋ฐ”์™€ ๊ฐ™์ด ๋Œ€๊ธฐ์—ด ์š”์†Œ๋Š” ์œ ํ˜•์ž…๋‹ˆ๋‹ค. mblk_t, ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค:

typedef struct msgb
{
  struct msgb *b_prev;   // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฟั€ะตะดั‹ะดัƒั‰ะธะน ัะปะตะผะตะฝั‚ ัะฟะธัะบะฐ.
  struct msgb *b_next;   // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ัะปะตะดัƒัŽั‰ะธะน ัะปะตะผะตะฝั‚ ัะฟะธัะบะฐ.
  struct msgb *b_cont;   // ะฃะบะฐะทะฐั‚ะตะปัŒ ะดะปั ะฟะพะดะบะปะตะนะบะธ ะบ ัะพะพะฑั‰ะตะฝะธัŽ ะดั€ัƒะณะธั… ัะพะพะฑั‰ะตะฝะธะน, ะดะปั ัะพะทะดะฐะฝะธั ะบะพั€ั‚ะตะถะฐ ัะพะพะฑั‰ะตะฝะธะน.
  struct datab *b_datap; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ัั‚ั€ัƒะบั‚ัƒั€ัƒ ะฑะปะพะบะฐ ะดะฐะฝะฝั‹ั….
  unsigned char *b_rptr; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฝะฐั‡ะฐะปะพ ะพะฑะปะฐัั‚ะธ ะดะฐะฝะฝั‹ั… ะดะปั ั‡ั‚ะตะฝะธั ะดะฐะฝะฝั‹ั… ะฑัƒั„ะตั€ะฐ b_datap.
  unsigned char *b_wptr; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฝะฐั‡ะฐะปะพ ะพะฑะปะฐัั‚ะธ ะดะฐะฝะฝั‹ั… ะดะปั ะทะฐะฟะธัะธ ะดะฐะฝะฝั‹ั… ะฑัƒั„ะตั€ะฐ b_datap.
  uint32_t reserved1;    // ะ—ะฐั€ะตะทะตั€ะฒะธั€ะพะฒะฐะฝะฝะพะต ะฟะพะปะต1, ะผะตะดะธะฐัั‚ั€ะธะผะตั€ ะฟะพะผะตั‰ะฐะตั‚ ั‚ัƒะดะฐ ัะปัƒะถะตะฑะฝัƒัŽ ะธะฝั„ะพั€ะผะฐั†ะธัŽ. 
  uint32_t reserved2;    // ะ—ะฐั€ะตะทะตั€ะฒะธั€ะพะฒะฐะฝะฝะพะต ะฟะพะปะต2, ะผะตะดะธะฐัั‚ั€ะธะผะตั€ ะฟะพะผะตั‰ะฐะตั‚ ั‚ัƒะดะฐ ัะปัƒะถะตะฑะฝัƒัŽ ะธะฝั„ะพั€ะผะฐั†ะธัŽ.
  #if defined(ORTP_TIMESTAMP)
  struct timeval timestamp;
  #endif
  ortp_recv_addr_t recv_addr;
} mblk_t;

๊ตฌ์กฐ mblk_t ์‹œ์ž‘ ๋ถ€๋ถ„์— ํฌ์ธํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. b_prev, b_next, ์ด์ค‘ ์—ฐ๊ฒฐ ๋ชฉ๋ก(ํ์ธ ํ)์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. queue_t).

๊ทธ๋Ÿฐ ๋‹ค์Œ ํฌ์ธํ„ฐ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. b_cont, ๋ฉ”์‹œ์ง€๊ฐ€ ํŠœํ”Œ์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํŠœํ”Œ์˜ ๋งˆ์ง€๋ง‰ ๋ฉ”์‹œ์ง€์˜ ๊ฒฝ์šฐ ์ด ํฌ์ธํ„ฐ๋Š” null๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ด…๋‹ˆ๋‹ค. b_datap, ๋ฉ”์‹œ์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋’ค์—๋Š” ๋ธ”๋ก ๋ฐ์ดํ„ฐ ๋ฒ„ํผ ๋‚ด๋ถ€ ์˜์—ญ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์˜ต๋‹ˆ๋‹ค. ํ•„๋“œ b_rptr ๋ฒ„ํผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ b_wptr ๋ฒ„ํผ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ๊ฐ€ ์ˆ˜ํ–‰๋  ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ํ•„๋“œ๋Š” ์„œ๋น„์Šค ์„ฑ๊ฒฉ์„ ๊ฐ€์ง€๋ฉฐ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ์ž‘๋™๊ณผ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์—๋Š” ์ด๋ฆ„์ด ํฌํ•จ๋œ ๋‹จ์ผ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. m1 ๋ฐ ๋ฐ์ดํ„ฐ ๋ธ”๋ก d1.
Mediastreamer2 VoIP ์—”์ง„ ํƒ์ƒ‰. 11 ๋ถ€
๋‹ค์Œ ๊ทธ๋ฆผ์€ ์„ธ ๊ฐœ์˜ ๋ฉ”์‹œ์ง€๋กœ ๊ตฌ์„ฑ๋œ ํŠœํ”Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. m1, m1_1, m1_2.
Mediastreamer2 VoIP ์—”์ง„ ํƒ์ƒ‰. 11 ๋ถ€

๋ฉ”์‹œ์ง• ๊ธฐ๋Šฅ mblk_t

์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€ mblk_t ํ•จ์ˆ˜์— ์˜ํ•ด ์ƒ์„ฑ๋จ:

mblk_t *allocb(int size, int pri); 

๊ทธ๋…€๋Š” ๊ธฐ์–ต ์†์— ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊ฒผ๋‹ค mblk_t ์ง€์ •๋œ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ ๋ธ”๋ก ํฌํ•จ ํฌ๊ธฐ, ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜ - pri ์ด ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 0์œผ๋กœ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋™์•ˆ ์ƒˆ ๋ฉ”์‹œ์ง€์˜ ๊ตฌ์กฐ๋ฅผ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. mblk_init(), ์ƒ์„ฑ๋œ ๊ตฌ์กฐ ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์žฌ์„ค์ •ํ•œ ๋‹ค์Œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ์„ ์‚ฌ์šฉํ•˜์—ฌ datab_alloc(), ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ตฌ์กฐ์˜ ํ•„๋“œ๊ฐ€ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

mp->b_datap=datab;
mp->b_rptr=mp->b_wptr=datab->db_base;
mp->b_next=mp->b_prev=mp->b_cont=NULL;

์ถœ๋ ฅ์—์„œ๋Š” ์ดˆ๊ธฐํ™”๋œ ํ•„๋“œ์™€ ๋นˆ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๊ฐ€ ํฌํ•จ๋œ ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ ๋ธ”๋ก ๋ฒ„ํผ์— ๋ณต์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

memcpy(msg->b_rptr, data, size);

์–ด๋””์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ด๊ณ , ํฌ๊ธฐ - ํฌ๊ธฐ.
๊ทธ๋Ÿฐ ๋‹ค์Œ ์“ฐ๊ธฐ ์ง€์ ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋ฒ„ํผ์˜ ์—ฌ์œ  ์˜์—ญ ์‹œ์ž‘ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

msg->b_wptr = msg->b_wptr + size

๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ๋ฒ„ํผ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

mblk_t *esballoc(uint8_t *buf, int size, int pri, void (*freefn)(void*)); 

ํ•จ์ˆ˜๋Š” ๋ฉ”์‹œ์ง€์™€ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. buf. ์ €๊ฒƒ๋“ค. ์ด ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ƒ์„ฑํ•  ๋•Œ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ํ—ค๋” ํ•„๋“œ ๋’ค์— ์œ„์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. datab_alloc(). ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๋ฒ„ํผ๋Š” ์›๋ž˜ ์œ„์น˜์— ์œ ์ง€๋˜์ง€๋งŒ ํฌ์ธํ„ฐ์˜ ๋„์›€์œผ๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ํ—ค๋”์— ์—ฐ๊ฒฐ๋˜์–ด ๊ทธ์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€์— mblk_t ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ ํ•จ์ˆ˜์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

mblk_t * appendb(mblk_t *mp, const char *data, int size, bool_t pad); 

mp โ€” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์ด ์ถ”๊ฐ€๋  ๋ฉ”์‹œ์ง€;
๋ฐ์ดํ„ฐ โ€” ๋ธ”๋ก์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ, ๊ทธ ๋ณต์‚ฌ๋ณธ์ด ๋ฉ”์‹œ์ง€์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
ํฌ๊ธฐ - ๋ฐ์ดํ„ฐ ํฌ๊ธฐ
์ธ์ฃผ โ€” ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ 4๋ฐ”์ดํŠธ ๊ฒฝ๊ณ„๋ฅผ ๋”ฐ๋ผ ์ •๋ ฌ๋˜์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ”Œ๋ž˜๊ทธ(ํŒจ๋”ฉ์€ XNUMX์œผ๋กœ ์ˆ˜ํ–‰๋จ)

๊ธฐ์กด ๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ์— ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์ด ์žˆ์œผ๋ฉด ์ƒˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋’ค์— ๋ถ™์—ฌ๋„ฃ์–ด์ง‘๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ์— ์—ฌ์œ  ๊ณต๊ฐ„์ด ์ ์€ ๊ฒฝ์šฐ ํฌ๊ธฐ, ์ถฉ๋ถ„ํ•œ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ ์ƒˆ ๋ฉ”์‹œ์ง€๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ด๋‹น ๋ฒ„ํผ์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ๋ฉ”์‹œ์ง€์— ์—ฐ๊ฒฐ๋œ ์ƒˆ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. b_cont. ์ด ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๋Š” ํŠœํ”Œ๋กœ ๋ณ€ํ•ฉ๋‹ˆ๋‹ค.

ํŠœํ”Œ์— ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

void msgappend(mblk_t *mp, const char *data, int size, bool_t pad);

๊ทธ๋…€๋Š” ํŠœํ”Œ์—์„œ ๋งˆ์ง€๋ง‰ ๋ฉ”์‹œ์ง€๋ฅผ ์ฐพ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๊ทธ๋Š” b_cont null์ด ๋จ) ์ด ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ก().

๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋‚˜ ํŠœํ”Œ์˜ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

int msgdsize(const mblk_t *mp);

ํŠœํ”Œ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ  ํ•ด๋‹น ๋ฉ”์‹œ์ง€์˜ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ์— ์žˆ๋Š” ์ด ๋ฐ์ดํ„ฐ ์–‘์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ๋ฐ์ดํ„ฐ ์–‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

 mp->b_wptr - mp->b_rptr

๋‘ ๊ฐœ์˜ ํŠœํ”Œ์„ ๊ฒฐํ•ฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

mblk_t *concatb(mblk_t *mp, mblk_t *newm);

๊ทธ๋…€๋Š” ํŠœํ”Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค ๋‰ด์—  ํŠœํ”Œ์˜ ๊ผฌ๋ฆฌ๊นŒ์ง€ mp ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ณผ ํŠœํ”Œ์˜ ๋งˆ์ง€๋ง‰ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํŠœํ”Œ์€ ๋‹จ์ผ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์ด ํฌํ•จ๋œ ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ ํ•จ์ˆ˜์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

void msgpullup(mblk_t *mp,int len);

์ธ์ˆ˜์ธ ๊ฒฝ์šฐ ๋ Œ -1์ด๋ฉด ํ• ๋‹น๋œ ๋ฒ„ํผ์˜ ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ์— ๋ Œ ์–‘์ˆ˜์ด๋ฉด ์ด ํฌ๊ธฐ์˜ ๋ฒ„ํผ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ํŠœํ”Œ ๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๊ธฐ์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„ํผ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ๋ณต์‚ฌ๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ํŠœํ”Œ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฉ”์‹œ์ง€๋Š” ๋ณต์‚ฌ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ์ƒˆ ํฌ๊ธฐ ๋ฒ„ํผ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ๋ฉ”์‹œ์ง€๋Š” ์‚ญ์ œ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ํž™์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ๋ฌผ์„ ์‚ญ์ œํ•  ๋•Œ mblk_t ํ˜ธ์ถœํ•  ๋•Œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค. ํ”„๋ฆฌ๋น„() 0์œผ๋กœ ํŒ๋ช…๋˜๋ฉด ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๊ฐ€ ์ธ์Šคํ„ด์Šค์™€ ํ•จ๊ป˜ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. mblk_t, ๊ทธ๊ฒƒ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์ƒˆ ๋ฉ”์‹œ์ง€ ํ•„๋“œ ์ดˆ๊ธฐํ™”:

void mblk_init(mblk_t *mp);

๋ฉ”์‹œ์ง€์— ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

mblk_t * appendb(mblk_t *mp, const char *data, size_t size, bool_t pad);

์ƒˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ์˜ ์—ฌ์œ  ๊ณต๊ฐ„์— ๋งž์ง€ ์•Š์œผ๋ฉด ํ•„์š”ํ•œ ํฌ๊ธฐ์˜ ๋ฒ„ํผ๊ฐ€ ํฌํ•จ๋œ ๋ณ„๋„๋กœ ์ƒ์„ฑ๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฉ”์‹œ์ง€์— ์ฒจ๋ถ€๋˜๊ณ (์ถ”๊ฐ€๋œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๋ฉ”์‹œ์ง€์— ์„ค์ •๋จ) ๋ฉ”์‹œ์ง€๊ฐ€ ํŠœํ”Œ๋กœ ๋ณ€ํ•ฉ๋‹ˆ๋‹ค.

ํŠœํ”Œ์— ๋ฐ์ดํ„ฐ ์กฐ๊ฐ ์ถ”๊ฐ€:

void msgappend(mblk_t *mp, const char *data, size_t size, bool_t pad); 

์ด ํ•จ์ˆ˜๋Š” ๋ฃจํ”„์—์„œappendb()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฐœ์˜ ํŠœํ”Œ์„ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉ:

mblk_t *concatb(mblk_t *mp, mblk_t *newm);

๋ฉ”์‹œ์ง€ ๋‰ด์—  ์— ์ฒจ๋ถ€๋ฉ๋‹ˆ๋‹ค mp.

๋‹จ์ผ ๋ฉ”์‹œ์ง€์˜ ๋ณต์‚ฌ๋ณธ ๋งŒ๋“ค๊ธฐ:

mblk_t *copyb(const mblk_t *mp);

๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ธ”๋ก์ด ํฌํ•จ๋œ ํŠœํ”Œ ๋ณต์‚ฌ ์™„๋ฃŒ:

mblk_t *copymsg(const mblk_t *mp);

ํŠœํ”Œ์˜ ์š”์†Œ๋Š” ํ•จ์ˆ˜์— ์˜ํ•ด ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ๋ณต์‚ฌ().

๋ฉ”์‹œ์ง€์˜ ๊ฐ„ํŽธํ•œ ๋ณต์‚ฌ๋ณธ ๋งŒ๋“ค๊ธฐ mblk_t. ์ด ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์€ ๋ณต์‚ฌ๋˜์ง€ ์•Š์ง€๋งŒ ์ฐธ์กฐ ์นด์šดํ„ฐ๋Š” ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. db_ref:

mblk_t *dupb(mblk_t *mp);

ํŠœํ”Œ์˜ ๊ฒฝ๋Ÿ‰ ๋ณต์‚ฌ๋ณธ ๋งŒ๋“ค๊ธฐ. ๋ฐ์ดํ„ฐ ๋ธ”๋ก์€ ๋ณต์‚ฌ๋˜์ง€ ์•Š์œผ๋ฉฐ ํ•ด๋‹น ์ฐธ์กฐ ์นด์šดํ„ฐ๋งŒ ์ฆ๊ฐ€๋ฉ๋‹ˆ๋‹ค. db_ref:

mblk_t *dupmsg(mblk_t* m);

ํŠœํ”Œ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€๋กœ ๋ฌถ๊ธฐ:

void msgpullup(mblk_t *mp,size_t len);

๋งŒ์•ฝ ์ธ์ˆ˜ ๋ Œ -1์ด๋ฉด ํ• ๋‹น๋œ ๋ฒ„ํผ์˜ ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ์‚ญ์ œ, ํŠœํ”Œ:

void freemsg(mblk_t *mp);

๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ์ฐธ์กฐ ์นด์šดํŠธ๋Š” 1์”ฉ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค. 0์— ๋„๋‹ฌํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๋ธ”๋ก๋„ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ๋˜๋Š” ํŠœํ”Œ์˜ ์ด ๋ฐ์ดํ„ฐ ์–‘์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

size_t msgdsize(const mblk_t *mp);

๋Œ€๊ธฐ์—ด ๋์—์„œ ๋ฉ”์‹œ์ง€ ๊ฒ€์ƒ‰:

mblk_t *ms_queue_peek_last (q);

ํ•œ ๋ฉ”์‹œ์ง€์˜ ์˜ˆ์•ฝ๋œ ํ•„๋“œ ๋‚ด์šฉ์„ ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค(์‹ค์ œ๋กœ ์ด๋Ÿฌํ•œ ํ•„๋“œ์—๋Š” ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค).

mblk_meta_copy(const mblk_t *source, mblk *dest);

์—ด queue_t

๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ์˜ ๋ฉ”์‹œ์ง€ ํ๋Š” ์ˆœํ™˜ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ชฉ๋ก์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ชฉ๋ก ์š”์†Œ์—๋Š” ์‹ ํ˜ธ ์ƒ˜ํ”Œ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ธ”๋ก์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ธ”๋ก์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋งŒ ์ฐจ๋ก€๋กœ ์ด๋™ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ž์ฒด๋Š” ์›€์ง์ด์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ํ•ด๋‹น ๋งํฌ๋งŒ ์ด๋™๋ฉ๋‹ˆ๋‹ค.
๋Œ€๊ธฐ์—ด์„ ์„ค๋ช…ํ•˜๋Š” ๊ตฌ์กฐ queue_t, ์•„๋ž˜์— ํ‘œ์‹œ๋จ:

typedef struct _queue
{
   mblk_t _q_stopper; /* "ะฅะพะปะพัั‚ะพะน" ัะปะตะผะตะฝั‚ ะพั‡ะตั€ะตะดะธ, ะฝะต ัƒะบะฐะทั‹ะฒะฐะตั‚ ะฝะฐ ะดะฐะฝะฝั‹ะต, ะธัะฟะพะปัŒะทัƒะตั‚ัั ั‚ะพะปัŒะบะพ ะดะปั ัƒะฟั€ะฐะฒะปะตะฝะธั ะพั‡ะตั€ะตะดัŒัŽ. ะŸั€ะธ ะธะฝะธั†ะธะฐะปะธะทะฐั†ะธะธ ะพั‡ะตั€ะตะดะธ (qinit()) ะตะณะพ ัƒะบะฐะทะฐั‚ะตะปะธ ะฝะฐัั‚ั€ะฐะธะฒะฐัŽั‚ัั ั‚ะฐะบ, ั‡ั‚ะพะฑั‹ ะพะฝะธ ัƒะบะฐะทั‹ะฒะฐะปะธ ะฝะฐ ะฝะตะณะพ ัะฐะผะพะณะพ. */
   int q_mcount;        // ะšะพะปะธั‡ะตัั‚ะฒะพ ัะปะตะผะตะฝั‚ะพะฒ ะฒ ะพั‡ะตั€ะตะดะธ.
} queue_t;

๊ตฌ์กฐ์—๋Š” ํ•„๋“œ(ํฌ์ธํ„ฐ)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. _q_์Šคํ† ํผ *mblk_t๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋Œ€๊ธฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ(๋ฉ”์‹œ์ง€)๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๊ตฌ์กฐ์˜ ๋‘ ๋ฒˆ์งธ ํ•„๋“œ๋Š” ๋Œ€๊ธฐ์—ด์— ์žˆ๋Š” ๋ฉ”์‹œ์ง€์˜ ์นด์šดํ„ฐ์ž…๋‹ˆ๋‹ค.
์•„๋ž˜ ๊ทธ๋ฆผ์€ 1๊ฐœ์˜ ๋ฉ”์‹œ์ง€ m4, m1, m2, m3๋ฅผ ํฌํ•จํ•˜๋Š” q4์ด๋ผ๋Š” ํ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
Mediastreamer2 VoIP ์—”์ง„ ํƒ์ƒ‰. 11 ๋ถ€
๋‹ค์Œ ๊ทธ๋ฆผ์€ 1๊ฐœ์˜ ๋ฉ”์‹œ์ง€ m4,m1,m2,m3๋ฅผ ํฌํ•จํ•˜๋Š” q4์ด๋ผ๋Š” ํ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ m2๋Š” ๋‘ ๊ฐœ์˜ ์ถ”๊ฐ€ ๋ฉ”์‹œ์ง€ m2_1 ๋ฐ m2_2๋ฅผ ํฌํ•จํ•˜๋Š” ํŠœํ”Œ์˜ ํ—ค๋“œ์ž…๋‹ˆ๋‹ค.

Mediastreamer2 VoIP ์—”์ง„ ํƒ์ƒ‰. 11 ๋ถ€

๋Œ€๊ธฐ์—ด ์ž‘์—…์„ ์œ„ํ•œ ํ•จ์ˆ˜ queue_t

๋Œ€๊ธฐ์—ด ์ดˆ๊ธฐํ™”:

void qinit(queue_t *q);

๋ถ„์•ผ _q_์Šคํ† ํผ (์ดํ•˜ โ€œ์Šคํ† ํผโ€๋ผ ์นญํ•จ)์€ ๋‹ค์Œ ํ•จ์ˆ˜์— ์˜ํ•ด ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. mblk_init(), ์ด์ „ ์š”์†Œ์™€ ๋‹ค์Œ ์š”์†Œ ํฌ์ธํ„ฐ๊ฐ€ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์กฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—ด ์š”์†Œ ์นด์šดํ„ฐ๊ฐ€ 0์œผ๋กœ ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ์š”์†Œ(๋ฉ”์‹œ์ง€) ์ถ”๊ฐ€:

void putq(queue_t *q, mblk_t *m);

์ƒˆ๋กœ์šด ์š”์†Œ m ๋ชฉ๋ก ๋์— ์ถ”๊ฐ€๋˜๋ฉด ์š”์†Œ ํฌ์ธํ„ฐ๊ฐ€ ์กฐ์ •๋˜์–ด ์Šคํ† ํผ๊ฐ€ ํ•ด๋‹น ๋‹ค์Œ ์š”์†Œ๊ฐ€ ๋˜๊ณ  ์Šคํ† ํผ์˜ ์ด์ „ ์š”์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—ด ์š”์†Œ ์นด์šดํ„ฐ๊ฐ€ ์ฆ๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์—ด์—์„œ ์š”์†Œ ๊ฒ€์ƒ‰:

mblk_t * getq(queue_t *q); 

์Šคํ† ํผ๊ฐ€ ๊ฒ€์ƒ‰๋œ ํ›„ ๋‚˜์˜ค๋Š” ๋ฉ”์‹œ์ง€์ด๋ฉฐ ์š”์†Œ ์นด์šดํ„ฐ๊ฐ€ ๊ฐ์†Œ๋ฉ๋‹ˆ๋‹ค. ์Šคํ† ํผ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋Œ€๊ธฐ์—ด์— ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด 0์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์—ด์— ๋ฉ”์‹œ์ง€ ์‚ฝ์ž…:

void insq(queue_t *q, mblk_t *emp, mblk_t *mp); 

์š”์†Œ mp ์š”์†Œ ์•ž์— ์‚ฝ์ž…๋จ EMP. ๋งŒ์•ฝ EMP=0์ด๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ๋Œ€๊ธฐ์—ด์˜ ๊ผฌ๋ฆฌ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์—ด ํ—ค๋“œ์—์„œ ๋ฉ”์‹œ์ง€ ๊ฒ€์ƒ‰:

void remq(queue_t *q, mblk_t *mp); 

์š”์†Œ ์นด์šดํ„ฐ๊ฐ€ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.

ํ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ์ฝ๊ธฐ:

mblk_t * peekq(queue_t *q); 

์š”์†Œ ์ž์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋™์•ˆ ๋Œ€๊ธฐ์—ด์—์„œ ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

void flushq(queue_t *q, int how);

๋…ผ์˜ ๋ฐฉ๋ฒ• ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—ด ์š”์†Œ ์นด์šดํ„ฐ๋Š” 0์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

ํ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ฝ๋Š” ๋งคํฌ๋กœ:

mblk_t * qlast(queue_t *q);

๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด๋กœ ์ž‘์—…ํ•  ๋•Œ ๋‹ค์Œ ์‚ฌํ•ญ์— ์œ ์˜ํ•˜์„ธ์š”. ms_queue_put(q, m) ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋„ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ง€๋ฉ๋‹ˆ๋‹ค. ๋น„์Šทํ•˜๊ฒŒ ํ–‰๋™ํ•œ๋‹ค ms_queue_next(q,m).

ํ•„ํ„ฐ ์—ฐ๊ฒฐ

์œ„์— ์„ค๋ช…๋œ ๋Œ€๊ธฐ์—ด์€ ํ•œ ํ•„ํ„ฐ์—์„œ ๋‹ค๋ฅธ ํ•„ํ„ฐ๋กœ ๋˜๋Š” ํ•˜๋‚˜์—์„œ ์—ฌ๋Ÿฌ ํ•„ํ„ฐ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•„ํ„ฐ์™€ ํ•ด๋‹น ์—ฐ๊ฒฐ์€ ๋ฐฉํ–ฅ์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ•„ํ„ฐ์˜ ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ์„ ์ผ๋ฐ˜ ๋‹จ์–ด "ํ•€"์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ•„ํ„ฐ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ์ˆœ์„œ๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ๋Š” "์‹ ํ˜ธ ์ง€์ "์ด๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹ ํ˜ธ ์ง€์ ์€ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. _MSCํฌ์ธํŠธ์—๋Š” ํ•„ํ„ฐ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์™€ ํ•ด๋‹น ํ•€ ์ค‘ ํ•˜๋‚˜์˜ ๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ•„ํ„ฐ์˜ ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ ์ค‘ ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ทธ๋ž˜ํ”„์˜ ์‹ ํ˜ธ ์ง€์ 

typedef struct _MSCPoint{
struct _MSFilter *filter; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ั„ะธะปัŒั‚ั€ ะผะตะดะธะฐัั‚ั€ะธะผะตั€ะฐ.
int pin;                        // ะะพะผะตั€ ะพะดะฝะพะณะพ ะธะท ะฒั…ะพะดะพะฒ ะธะปะธ ะฒั‹ั…ะพะดะพะฒ ั„ะธะปัŒั‚ั€ะฐ, ั‚.ะต. ะฟะธะฝ.
} MSCPoint;

ํ•„ํ„ฐ ํ•€์˜ ๋ฒˆํ˜ธ๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ํ์— ์˜ํ•œ ๋‘ ํ•€์˜ ์—ฐ๊ฒฐ์€ ๋‹ค์Œ ๊ตฌ์กฐ๋กœ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. _MSํ์—๋Š” ๋ฉ”์‹œ์ง€ ํ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๋‘ ์‹ ํ˜ธ ์ง€์ ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

typedef struct _MSQueue
{
queue_t q;
MSCPoint prev;
MSCPoint next;
}MSQueue;

์šฐ๋ฆฌ๋Š” ์ด ๊ตฌ์กฐ๋ฅผ ์‹ ํ˜ธ ๋งํฌ๋ผ๊ณ  ๋ถ€๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ ํ•„ํ„ฐ์—๋Š” ์ž…๋ ฅ ๋งํฌ ํ…Œ์ด๋ธ”๊ณผ ์ถœ๋ ฅ ๋งํฌ ํ…Œ์ด๋ธ”(MSQueue). ํ…Œ์ด๋ธ” ํฌ๊ธฐ๋Š” ํ•„ํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋‚ด๋ณด๋‚ธ ์œ ํ˜•์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. MSFilterDesc, ์ž์ฒด ํ•„ํ„ฐ๋ฅผ ๊ฐœ๋ฐœํ–ˆ์„ ๋•Œ. ๋‹ค์Œ์€ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ์˜ ํ•„ํ„ฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. MSํ•„ํ„ฐ:


struct _MSFilter{
    MSFilterDesc *desc;    /* ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะดะตัะบั€ะธะฟั‚ะพั€ ั„ะธะปัŒั‚ั€ะฐ. */
    /* ะ—ะฐั‰ะธั‰ะตะฝะฝั‹ะต ะฐั‚ั€ะธะฑัƒั‚ั‹, ะธั… ะฝะตะปัŒะทั ัะดะฒะธะณะฐั‚ัŒ ะธะปะธ ัƒะฑะธั€ะฐั‚ัŒ ะธะฝะฐั‡ะต ะฑัƒะดะตั‚ ะฝะฐั€ัƒัˆะตะฝะฐ ั€ะฐะฑะพั‚ะฐ ั ะฟะปะฐะณะธะฝะฐะผะธ. */
    ms_mutex_t lock;      /* ะกะตะผะฐั„ะพั€. */
    MSQueue **inputs;     /* ะขะฐะฑะปะธั†ะฐ ะฒั…ะพะดะฝั‹ั… ะปะธะฝะบะพะฒ. */
    MSQueue **outputs;    /* ะขะฐะฑะปะธั†ะฐ ะฒั‹ั…ะพะดะฝั‹ั… ะปะธะฝะบะพะฒ. */
    struct _MSFactory *factory; /* ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ั„ะฐะฑั€ะธะบัƒ, ะบะพั‚ะพั€ะฐั ัะพะทะดะฐะปะฐ ะดะฐะฝะฝั‹ะน ัะบะทะตะผะฟะปัั€ ั„ะธะปัŒั‚ั€ะฐ. */
    void *padding;              /* ะะต ะธัะฟะพะปัŒะทัƒะตั‚ัั, ะฑัƒะดะตั‚ ะทะฐะดะตะนัั‚ะฒะพะฒะฐะฝ ะตัะปะธ ะดะพะฑะฐะฒัั‚ัั ะทะฐั‰ะธั‰ะตะฝะฝั‹ะต ะฟะพะปั. */
    void *data;                 /* ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฟั€ะพะธะทะฒะพะปัŒะฝัƒัŽ ัั‚ั€ัƒะบั‚ัƒั€ัƒ ะดะปั ั…ั€ะฐะฝะตะฝะธั ะดะฐะฝะฝั‹ั… ะฒะฝัƒั‚ั€ะตะฝะฝะตะณะพ ัะพัั‚ะพัะฝะธั ั„ะธะปัŒั‚ั€ะฐ ะธ ะฟั€ะพะผะตะถัƒั‚ะพั‡ะฝั‹ั… ะฒั‹ั‡ะธัะปะตะฝะธะน. */
    struct _MSTicker *ticker;   /* ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะพะฑัŠะตะบั‚ ั‚ะธะบะตั€ะฐ, ะบะพั‚ะพั€ั‹ะน ะฝะต ะดะพะปะถะตะฝ ะฑั‹ั‚ัŒ ะฝัƒะปะตะฒั‹ะผ ะบะพะณะดะฐ ะฒั‹ะทั‹ะฒะฐะตั‚ัั ั„ัƒะฝะบั†ะธั process(). */
    /*private attributes, they can be moved and changed at any time*/
    MSList *notify_callbacks; /* ะกะฟะธัะพะบ ะพะฑั€ะฐั‚ะฝั‹ั… ะฒั‹ะทะพะฒะพะฒ, ะธัะฟะพะปัŒะทัƒะตะผั‹ั… ะดะปั ะพะฑั€ะฐะฑะพั‚ะบะธ ัะพะฑั‹ั‚ะธะน ั„ะธะปัŒั‚ั€ะฐ. */
    uint32_t last_tick;       /* ะะพะผะตั€ ะฟะพัะปะตะดะฝะตะณะพ ั‚ะฐะบั‚ะฐ, ะบะพะณะดะฐ ะฒั‹ะฟะพะปะฝัะปัั ะฒั‹ะทะพะฒ process(). */ 
    MSFilterStats *stats;     /* ะกั‚ะฐั‚ะธัั‚ะธะบะฐ ั€ะฐะฑะพั‚ั‹ ั„ะธะปัŒั‚ั€ะฐ.*/
    int postponed_task; /*ะšะพะปะธั‡ะตัั‚ะฒะพ ะพั‚ะปะพะถะตะฝะฝั‹ั… ะทะฐะดะฐั‡. ะะตะบะพั‚ะพั€ั‹ะต ั„ะธะปัŒั‚ั€ั‹ ะผะพะณัƒั‚ ะพั‚ะบะปะฐะดั‹ะฒะฐั‚ัŒ ะพะฑั€ะฐะฑะพั‚ะบัƒ ะดะฐะฝะฝั‹ั… (ะฒั‹ะทะพะฒ process()) ะฝะฐ ะฝะตัะบะพะปัŒะบะพ ั‚ะฐะบั‚ะพะฒ.*/
    bool_t seen;  /* ะคะปะฐะณ, ะบะพั‚ะพั€ั‹ะน ะธัะฟะพะปัŒะทัƒะตั‚ ั‚ะธะบะตั€, ั‡ั‚ะพะฑั‹ ะฟะพะผะตั‡ะฐั‚ัŒ ั‡ั‚ะพ ัั‚ะพั‚ ัะบะทะตะผะฟะปัั€ ั„ะธะปัŒั‚ั€ะฐ ะพะฝ ัƒะถะต ะพะฑัะปัƒะถะธะป ะฝะฐ ะดะฐะฝะฝะพะผ ั‚ะฐะบั‚ะต.*/
};
typedef struct _MSFilter MSFilter;

๊ณ„ํš์— ๋”ฐ๋ผ C ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ•„ํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•œ ํ›„(ํ‹ฐ์ปค๋Š” ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์Œ) ๋ฐฉํ–ฅ์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ๋Š” ๊ตฌ์กฐ์˜ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. MSํ•„ํ„ฐ, ๊ฐ€์žฅ์ž๋ฆฌ๋Š” ๋งํฌ์˜ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. MSQueue.

ํ‹ฐ์ปค์˜ ํ™œ๋™ ๋น„ํ•˜์ธ๋“œ ์Šคํ† ๋ฆฌ

๋‚ด๊ฐ€ ํ‹ฐ์ปค๊ฐ€ ์ง„๋“œ๊ธฐ ์†Œ์Šค์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ผ๊ณ  ๋งํ–ˆ์„ ๋•Œ, ๊ทธ๊ฒƒ์€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ง„์‹ค์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ‹ฐ์ปค๋Š” ์‹œ๊ณ„์—์„œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค() ์—ฐ๊ฒฐ๋œ ํšŒ๋กœ(๊ทธ๋ž˜ํ”„)์˜ ๋ชจ๋“  ํ•„ํ„ฐ. C ํ”„๋กœ๊ทธ๋žจ์˜ ๊ทธ๋ž˜ํ”„ ํ•„ํ„ฐ์— ํ‹ฐ์ปค๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ์ง€๊ธˆ๋ถ€ํ„ฐ ๋Œ ๋•Œ๊นŒ์ง€ ํ‹ฐ์ปค๊ฐ€ ์ œ์–ดํ•  ๊ทธ๋ž˜ํ”„๋ฅผ ํ‹ฐ์ปค์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ํ›„ ํ‹ฐ์ปค๋Š” ๊ด€๋ฆฌ์— ๋งก๊ฒจ์ง„ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฒ€์‚ฌํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์—ฌ ์ด๋ฅผ ํฌํ•จํ•˜๋Š” ํ•„ํ„ฐ ๋ชฉ๋ก์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ํ•„ํ„ฐ๋ฅผ ๋‘ ๋ฒˆ "๊ณ„์‚ฐ"ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๊ฒ€์ƒ‰๋œ ํ•„ํ„ฐ์— ํ™•์ธ๋ž€์„ ๋ฐฐ์น˜ํ•˜์—ฌ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ณธ. ๊ฐ ํ•„ํ„ฐ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋งํฌ ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ๋™์•ˆ ํ‹ฐ์ปค๋Š” ํ•„ํ„ฐ ์ค‘์— ๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ์†Œ์Šค ์—ญํ• ์„ ํ•˜๋Š” ํ•„ํ„ฐ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฉด ๊ทธ๋ž˜ํ”„๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด ํ‹ฐ์ปค๊ฐ€ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ" ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜๋ฉด ๋ฐœ๊ฒฌ๋œ ๊ฐ ํ•„ํ„ฐ์— ๋Œ€ํ•ด ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ „์ฒ˜๋ฆฌ(). ๋‹ค์Œ ์ฒ˜๋ฆฌ ์ฃผ๊ธฐ(๊ธฐ๋ณธ์ ์œผ๋กœ 10๋ฐ€๋ฆฌ์ดˆ๋งˆ๋‹ค)๊ฐ€ ์‹œ์ž‘๋˜์ž๋งˆ์ž ํ‹ฐ์ปค๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค() ์ด์ „์— ๋ฐœ๊ฒฌ๋œ ๋ชจ๋“  ์†Œ์Šค ํ•„ํ„ฐ์— ๋Œ€ํ•ด, ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ชฉ๋ก์— ์žˆ๋Š” ๋‚˜๋จธ์ง€ ํ•„ํ„ฐ์— ๋Œ€ํ•ด. ํ•„ํ„ฐ์— ์ž…๋ ฅ ๋งํฌ๊ฐ€ ์žˆ์œผ๋ฉด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค() ์ž…๋ ฅ ๋งํฌ ๋Œ€๊ธฐ์—ด์ด ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ชฉ๋ก์˜ ๋‹ค์Œ ํ•„ํ„ฐ๋กœ ์ด๋™ํ•˜์—ฌ ์ž…๋ ฅ ๋งํฌ์— ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์–ด์งˆ ๋•Œ๊นŒ์ง€ "์Šคํฌ๋กค"ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ํ‹ฐ์ปค๋Š” ํ•„ํ„ฐ์—์„œ ํ•„ํ„ฐ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์œผ๋กœ ์‚ฌ์ดํด ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ ํŠœํ”Œ๋กœ ๋Œ์•„๊ฐ€์„œ ๊ทธ๋Ÿฌํ•œ ์—”ํ„ฐํ‹ฐ๊ฐ€ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ์— ์ถ”๊ฐ€๋œ ์ด์œ ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„ํ„ฐ ๋‚ด๋ถ€์—์„œ ์ž‘๋™ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์–‘์€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์—์„œ ์ˆ˜์‹ ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ฒ„ํผ ํฌ๊ธฐ์˜ ๋ฐฐ์ˆ˜๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ •์˜์— ๋”ฐ๋ผ ํฌ๊ธฐ๊ฐ€ 512์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ธ ๋ฐ์ดํ„ฐ ๋ธ”๋ก๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์† ํ‘ธ๋ฆฌ์— ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•„ํ„ฐ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 160์นด์šดํŠธ๋กœ ํ•˜์ž. ๋ฐ์ดํ„ฐ๊ฐ€ ์ „ํ™” ์ฑ„๋„์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ ์ž…๋ ฅ์— ์žˆ๋Š” ๊ฐ ๋ฉ”์‹œ์ง€์˜ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋Š” XNUMX๊ฐœ์˜ ์‹ ํ˜ธ ์ƒ˜ํ”Œ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ž…๋ ฅ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ ํ‹ฐ์ปค์™€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์—ฌ ์ž…๋ ฅ ๋งํฌ๊ฐ€ ๋น„์–ด ์žˆ์„ ๋•Œ๊นŒ์ง€ ํ•„ํ„ฐ ์Šคํฌ๋กค์ด ์‹คํŒจํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์ด ๊ทœ์น™์„ ํ•„ํ„ฐ์˜ ์„ธ ๋ฒˆ์งธ ์›์น™์œผ๋กœ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์›์น™์— ๋”ฐ๋ฅด๋ฉด ํ•„ํ„ฐ์˜ process() ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ ๋Œ€๊ธฐ์—ด์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ „์ฒด ๋ธ”๋ก๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ž…๋ ฅ์—์„œ 512๊ฐœ์˜ ์ƒ˜ํ”Œ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•„ํ„ฐ๋Š” 640๊ฐœ์˜ ์ƒ˜ํ”Œ์„ ๊ฐ€์ ธ์™€์„œ ๊ทธ ์ค‘ 512๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ๋‚˜๋จธ์ง€๋Š” ๋ฐ์ดํ„ฐ์˜ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„์„ ์ถ•์ ํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•„ํ„ฐ๋Š” ์ฃผ์š” ์ž‘์—… ์™ธ์—๋„ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ค‘๊ฐ„ ์ €์žฅ์„ ์œ„ํ•œ ๋ณด์กฐ ์ž‘์—…์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ ๊ฐœ๋ฐœ์ž์™€ ์ด ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์€ ํŠœํ”Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํŠน์ˆ˜ ๊ฐœ์ฒด์ธ MSBufferizer(๋ฒ„ํผ๋Ÿฌ)๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„ํผ๋ผ์ด์ €(MSBufferizer)

์ด๋Š” ํ•„ํ„ฐ ๋‚ด๋ถ€์— ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ•์ ํ•˜๊ณ  ์ •๋ณด์˜ ์–‘์ด ํ•„ํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•  ๋•Œ ์ฆ‰์‹œ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ œ์ถœํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ๋ฒ„ํผ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ•์ ํ•˜๋Š” ๋™์•ˆ ํ•„ํ„ฐ๋Š” ํ”„๋กœ์„ธ์„œ์˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์œ ํœด ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ„ํผ๋Ÿฌ์˜ ์ฝ๊ธฐ ํ•จ์ˆ˜๊ฐ€ 0์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ž๋งˆ์ž ํ•„ํ„ฐ์˜ process() ํ•จ์ˆ˜๋Š” ๋ฒ„ํผ๋Ÿฌ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์†Œ์ง„๋  ๋•Œ๊นŒ์ง€ ํ•„์š”ํ•œ ํฌ๊ธฐ์˜ ๋ถ€๋ถ„์„ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
์•„์ง ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋Š” ํŠœํ”Œ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋กœ ๋ฒ„ํผ์— ๋‚จ์•„ ์žˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์— ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํ›„์† ๋ธ”๋ก์ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋ฒ„ํผ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ตฌ์กฐ:

struct _MSBufferizer{
queue_t q; /* ะžั‡ะตั€ะตะดัŒ ัะพะพะฑั‰ะตะฝะธะน. */
int size; /* ะกัƒะผะผะฐั€ะฝั‹ะน ั€ะฐะทะผะตั€ ะดะฐะฝะฝั‹ั… ะฝะฐั…ะพะดัั‰ะธั…ัั ะฒ ะฑัƒั„ะตั€ะธะทะฐั‚ะพั€ะต ะฒ ะดะฐะฝะฝั‹ะน ะผะพะผะตะฝั‚. */
};
typedef struct _MSBufferizer MSBufferizer;

MSBufferizer ์ž‘์—…์„ ์œ„ํ•œ ํ•จ์ˆ˜

์ƒˆ ๋ฒ„ํผ ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ:

MSBufferizer * ms_bufferizer_new(void);

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ms_bufferizer_init() ๊ทธ๋ฆฌ๊ณ  ํฌ์ธํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐํ™” ๊ธฐ๋Šฅ:

void ms_bufferizer_init(MSBufferizer *obj); 

๋Œ€๊ธฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. q, ํ•„๋“œ ํฌ๊ธฐ 0์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€:

void ms_bufferizer_put(MSBufferizer *obj, mblk_t *m); 

๋ฉ”์‹œ์ง€ m์ด ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๊ณ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ค์Œ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ํฌ๊ธฐ.

๋งํฌ ๋ฐ์ดํ„ฐ ํ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ๋ฒ„ํผ๋กœ ์ „์†ก q:

void ms_bufferizer_put_from_queue(MSBufferizer *obj, MSQueue *q);   

๋งํฌ์—์„œ ๋ฉ”์‹œ์ง€ ์ „์†กํ•˜๊ธฐ q ๋ฒ„ํผ์—์„œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ms_bufferizer_put().

๋ฒ„ํผ์—์„œ ์ฝ๊ธฐ:

int ms_bufferizer_read(MSBufferizer *obj, uint8_t *data, int datalen); 

๋ฒ„ํผ์— ์ถ•์ ๋œ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ(๋ฐ์ดํ„ฐ๋ Œ), ํ•จ์ˆ˜๋Š” 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ์— ๋ณต์‚ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฒ„ํผ์— ์žˆ๋Š” ํŠœํ”Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ณต์‚ฌ ํ›„์—๋Š” ํŠœํ”Œ์ด ์‚ญ์ œ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค. datalen ๋ฐ”์ดํŠธ๊ฐ€ ๋ณต์‚ฌ๋˜๋Š” ์ˆœ๊ฐ„ ๋ณต์‚ฌ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ธ”๋ก ์ค‘๊ฐ„์— ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ์ด ๋ฉ”์‹œ์ง€์—์„œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์€ ๋ณต์‚ฌ๋˜์ง€ ์•Š์€ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์œผ๋กœ ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์— ์ „ํ™”ํ•˜๋ฉด ์ด ์‹œ์ ๋ถ€ํ„ฐ ๋ณต์‚ฌ๊ฐ€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ฒ„ํผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ์ฝ์Šต๋‹ˆ๋‹ค.

int ms_bufferizer_get_avail(MSBufferizer *obj); 

ํ•„๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํฌ๊ธฐ ๋ฒ„ํผ๋Ÿฌ.

๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ ์ผ๋ถ€ ์‚ญ์ œ:

void ms_bufferizer_skip_bytes(MSBufferizer *obj, int bytes);

์ง€์ •๋œ ๋ฐ”์ดํŠธ ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฒ€์ƒ‰๋˜๊ณ  ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋Š” ํ๊ธฐ๋ฉ๋‹ˆ๋‹ค.

๋ฒ„ํผ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ์‚ญ์ œ:

void ms_bufferizer_flush(MSBufferizer *obj); 

๋ฐ์ดํ„ฐ ์นด์šดํ„ฐ๊ฐ€ 0์œผ๋กœ ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๋ฒ„ํผ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ์‚ญ์ œ:

void ms_bufferizer_uninit(MSBufferizer *obj); 

์นด์šดํ„ฐ๋Š” ์žฌ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฒ„ํผ ์ œ๊ฑฐ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ:

void ms_bufferizer_destroy(MSBufferizer *obj);  

๋ฒ„ํผ๋Ÿฌ ์‚ฌ์šฉ ์˜ˆ๋Š” ์—ฌ๋Ÿฌ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ ํ•„ํ„ฐ์˜ ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด MS_L16_ENC ํ•„ํ„ฐ์—์„œ๋Š” ์ƒ˜ํ”Œ์˜ ๋ฐ”์ดํŠธ๋ฅผ ๋„คํŠธ์›Œํฌ ์ˆœ์„œ์—์„œ ํ˜ธ์ŠคํŠธ ์ˆœ์„œ๋กœ ์žฌ๋ฐฐ์—ดํ•ฉ๋‹ˆ๋‹ค. l16.c

๋‹ค์Œ ๊ธ€์—์„œ๋Š” ํ‹ฐ์ปค ๋ถ€ํ•˜ ์ถ”์ • ๋ฌธ์ œ์™€ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋จธ์—์„œ ๊ณผ๋„ํ•œ ์ปดํ“จํŒ… ๋ถ€ํ•˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€