κ°μ π
μ¬λ΄μμ μμ€ νμΌμ λν λΌμ΄μΌμ€λ₯Ό μ 리νκΈ° μμνλ©΄μ κΈ°μ‘΄ μ ν리μΌμ΄μ
μμ 리λ
μ€μ pipe λ₯Ό μ΄μ©νμ¬ κ΅¬νλ λ©μΈμ§ νλ₯Ό μ°κ²° 리μ€νΈλ‘ μ¬μμ±νλ μμ
μ λ§‘κ² λμλ€. μ²μμλ 리λ
μ€μ 컀λμμ μ 곡νλ list.h
λ₯Ό μ¬μ©νμ§ λͺ»ν΄μ μ°κ²° 리μ€νΈλ₯Ό νλΆμμ μ μ¬μ©νλ λ°©μμΌλ‘ μ§μ ꡬννκ³ μ νμλ€. νμ§λ§ μ‘°κΈ λ μ°Ύμ보λ BSD λ²μ μ μ°κ²° 리μ€νΈκ° <sys/queue.h>
μ ννλ‘ μ‘΄μ¬νκ³ μμκ³ νμ¬ FreeBSDμ ν¬ν¨λμ΄ μλ queue.h μλ λ€λ₯΄μ§λ§ μ€λ μ 곡μ νλ λ κ±°μ μ½λλ‘μ μ¬μ ν 리λ
μ€ μ»€λ λ΄μ BSD 컀λ λΌμ΄λΈλ¬λ¦¬λ₯Ό κ°μ§νκ³ μμλ€. λΌμ΄μΌμ€μ μ ν λ¬Έμ κ° λμ§ μμ λΏλ§ μλλΌ νμν λ©μμ§ νλ₯Ό ꡬννκΈ° μν 맀ν¬λ‘κ° μκΈ° μ½κ² μ μλμ΄ μμ΄ μμ±νλλ°μλ ν¬κ² μ΄λ ΅μ§ μμλ€. λμ , λΆνμνκ² μλͺ»λ λ©λͺ¨λ¦¬ μ κ·ΌμΌλ‘ μΈν μ½λλ₯Ό λλ²κΉ
νλλ° μκ°μ΄ λ§μ΄ κ±Έλ Έλ€.
queue.h π
μμ
μ μ¬μ©νλ queue.h νμΌ(https://github.com/freebsd/freebsd/blob/master/sys/sys/queue.h μ°Έκ³ )μλ LISTμ TAILQ, CIRCLEQκ° κ΅¬νλμ΄ μμλ€. λ§ν¬λ μ΅μ λ²μ μ λΌμ΄λΈλ¬λ¦¬λΌ Circular Queueκ° μ¬λΌμ Έμμ κ²μ΄λ€. 리λ
μ€μ list.h
μ λ§μ°¬κ°μ§λ‘ BSDμ queue.h
λ 리μ€νΈλ₯Ό μ¬μ©νκΈ° μν΄ μ¬λ―Έμλ λ°©λ²μ μ¬μ©νλ€. λ¨Όμ man-pageμ κΈ°μ λμ΄ μλ μμλ₯Ό μμμΌλ‘ νλμ© μ΄ν΄λ³΄μ.
|
|
λ¨Όμ , TAILQ_HEAD
λΆν° μ΄ν΄λ³΄λ©΄ 맀ν¬λ‘λ₯Ό ν΅ν΄ μΈμλ‘ λκΈ΄ μ΄λ¦μΌλ‘ ꡬ쑰체λ₯Ό νλ μ€μ νλ κ²μ μ μ μλ€. μλ₯Ό λ€μ΄ μλμ κ°μ΄ μ μλ μλ£νμ TAILQ ννλ‘ μ°κ²°νκ³ μΆλ€λ©΄,
|
|
μμ μ½λμ²λΌ μ μνμ¬ μ¬μ©ν μ μλ€. μλ£κ΅¬μ‘° μμ TAILQ_ENTRY
λ₯Ό μ¬μ©ν¨μΌλ‘μ¨ λ§ν¬ κ°μ²΄λ₯Ό ν¬ν¨νλ λ°©μμΌλ‘ ꡬννλ€. μ μμ μμ, μ°κ²° 리μ€νΈλ struct msg_head* head
λ₯Ό ν΅ν΄ μ κ·Όν μ μμΌλ©°, headμ μ°κ²°λλ λ
Έλλ€μ μ€μ λ°μ΄ν° struct message
μ체λ *head
κ° κ°λ *tqh_first
, **tqh_last
λ₯Ό ν΅ν΄ μ»μ μ μλ€. μμμ TAILQ_HEAD
맀ν¬λ‘λ₯Ό ν΅ν΄ μ»μ ꡬ쑰체μ ꡬ쑰λ μλμ κ°λ€.
μ 체μ μΈ μ°κ²°μ λ€μ΄μ΄κ·Έλ¨μΌλ‘ λνλ΄λ©΄ μλμ κ°λ€.