ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
๐ŸŒณ Building `ctree`: A Lightweight Unix `tree` Clone in C
Dev.toDev.to
Backend

๊ฐœ๋ฐœ์ž๊ฐ€ Unix tree ๋ช…๋ น์–ด๋ฅผ C๋กœ ์žฌ๊ตฌํ˜„ํ•˜๋ฉด์„œ opendir()/readdir(), stat(), ์žฌ๊ท€ ํ•จ์ˆ˜, qsort()๋ฅผ ํ†ตํ•œ ์‹ค๋ฌด CLI ๋„๊ตฌ ์„ค๊ณ„ ๋ฐฉ์‹ ์Šต๋“

๐ŸŒณ Building `ctree`: A Lightweight Unix `tree` Clone in C

Farhad Rahimi Klie2026๋…„ 3์›” 28์ผ3๋ถ„intermediate

Context

Unix tree์™€ ๊ฐ™์€ ์‹ค์ œ CLI ๋„๊ตฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ก ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•˜๋ฉฐ, ํŒŒ์ผ์‹œ์Šคํ…œ ์ˆœํšŒ, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ์ธ์ž ํŒŒ์‹ฑ ๋“ฑ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์„ ํ†ตํ•ฉ์ ์œผ๋กœ ํ•™์Šตํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค.

Technical Solution

  • opendir()์™€ readdir()๋ฅผ ์‚ฌ์šฉํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ ์—”ํŠธ๋ฆฌ ์ฝ๊ธฐ: ๋‹จ์ˆœ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๋ฐฐ์—ด์— ์ €์žฅ
  • stat() ํ•จ์ˆ˜๋กœ ํŒŒ์ผ/๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ๋ถ„: ๊ฐ ์—”ํŠธ๋ฆฌ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ํ•„ํ„ฐ๋ง ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ตฌํ˜„
  • qsort()๋ฅผ ํ†ตํ•œ ์•ŒํŒŒ๋ฒณ ์ •๋ ฌ: ๋ฐฐ์—ด์— ์ˆ˜์ง‘๋œ ์—”ํŠธ๋ฆฌ๋“ค์„ ์ •๋ ฌํ•˜์—ฌ ๊น”๋”ํ•œ ์ถœ๋ ฅ ๋ณด์žฅ
  • ์žฌ๊ท€์  ๋””๋ ‰ํ„ฐ๋ฆฌ ์ˆœํšŒ ํŒŒ์ดํ”„๋ผ์ธ: ์—”ํŠธ๋ฆฌ ์ˆ˜์ง‘ โ†’ ํ•„ํ„ฐ๋ง โ†’ ์ถœ๋ ฅ ๋ฐ ์ธ๋ฑ์‹ฑ โ†’ ์žฌ๊ท€ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋กœ ๊ตฌํ˜„
  • ์„ ํƒ์  ํ•„ํ„ฐ๋ง ์˜ต์…˜ ๊ตฌํ˜„: -d ํ”Œ๋ž˜๊ทธ๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ๋งŒ ํ‘œ์‹œ, -L ํ”Œ๋ž˜๊ทธ๋กœ ์žฌ๊ท€ ๊นŠ์ด ์ œํ•œ, ํŒŒ์ผ ํฌ๊ธฐ ๋ฐ”์ดํŠธ ๋‹จ์œ„ ํ‘œ์‹œ
  • ๋ชจ๋“ˆ์‹ C ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ: Tree.h(์„ ์–ธ), Tree.c(ํ•ต์‹ฌ ๋กœ์ง), main.c(CLI ํŒŒ์‹ฑ)๋กœ ๋ถ„๋ฆฌ

Key Takeaway

C์—์„œ ์‹ค์ œ CLI ๋„๊ตฌ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ POSIX API(opendir, readdir, stat), ๋™์  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ(strdup, free), ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด ์ •๋ ฌ ํ›„ ํ•„ํ„ฐ๋งํ•˜๋Š” ์ˆœ์„œ ์กฐ์ •์ด ์ถœ๋ ฅ ์ •ํ™•์„ฑ์— ์ง์ ‘ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ, ์ž‘์€ ํ”„๋กœ์ ํŠธ์ผ์ง€๋ผ๋„ ์ด๋Ÿฌํ•œ ์ €์ˆ˜์ค€ ๊ฐœ๋…๋“ค์„ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ฒฝํ—˜ํ•˜๋Š” ๊ฒƒ์ด ์‹œ์Šคํ…œ ๋„๊ตฌ์˜ ์„ค๊ณ„ ์›๋ฆฌ๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ์ดํ•ดํ•˜๊ฒŒ ํ•œ๋‹ค.


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

์›๋ฌธ ์ฝ๊ธฐ