๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
6. CS ๊ธฐ์ดˆ ๐Ÿ“š/Linux & Unix ๐Ÿง

[Linux/Unix] ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ดํ•ด

by lxvxxu 2025. 10. 20.

 

๐Ÿ“˜ 1 [02] ๋ฆฌ๋ˆ…์Šค์œ ๋‹‰์Šค์‹œ์Šคํ…œํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜์ดํ•ด ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์‹œ์Šคํ…œ ๊ตฌ์กฐ์™€ ํ‘œ์ค€, ์‹œ์Šคํ…œ ํ˜ธ์ถœ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜, man ํŽ˜์ด์ง€ ์‚ฌ์šฉ๋ฒ•
๐Ÿงญ 2 [02] vi vi ์—๋””ํ„ฐ ์‚ฌ์šฉ๋ฒ• — ๋ชจ๋“œ, ๋ช…๋ น์–ด, ํŽธ์ง‘, ์ €์žฅ ๋“ฑ
๐Ÿ’ป 3 [03] ๋ฐฐ์‹œ ์…ธ Bash ์…ธ ๊ธฐ์ดˆ, ์ž…์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜, ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ์…ธ ๋ช…๋ น ํ™œ์šฉ
๐Ÿ” 4 [03] ํŒŒ์ผ ์ ‘๊ทผ ๊ถŒํ•œ ๊ด€๋ฆฌ ํŒŒ์ผ ์†์„ฑ ๋ฐ ์ ‘๊ทผ๊ถŒํ•œ(chmod, umask, ls -l)
โš™๏ธ 5 [03] ๋ฐฐ์‹œ ์…ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์…ธ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ, ๋ณ€์ˆ˜, ์ œ์–ด๋ฌธ, ํ•จ์ˆ˜, ๋””๋ฒ„๊น… ๋“ฑ
๐Ÿ“‚ 6 [04] ๋””๋ ‰ํ„ฐ๋ฆฌ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ, ์ƒ์„ฑ·์‚ญ์ œ·๊ด€๋ฆฌ ํ•จ์ˆ˜, inode ๊ฐœ๋…
๐Ÿ“„ 7 [05] ํŒŒ์ผ ๋‹ค๋ฃจ๊ธฐ ํŒŒ์ผ ์ •๋ณด ๊ฒ€์ƒ‰, ์ ‘๊ทผ ๊ถŒํ•œ ์ œ์–ด, ๋งํฌ ํŒŒ์ผ ์ƒ์„ฑ
๐Ÿงพ 8 [06] ํŒŒ์ผ ์ž…์ถœ๋ ฅ ์ €์ˆ˜์ค€·๊ณ ์ˆ˜์ค€ ํŒŒ์ผ ์ž…์ถœ๋ ฅ(open, read, write, fopen ๋“ฑ)
๐Ÿง  9 [07] ์‹œ์Šคํ…œ ์ •๋ณด uname, sysconf, pathconf ๋“ฑ ์‹œ์Šคํ…œ ์ •๋ณด ๊ฒ€์ƒ‰
โšก 10 [07] ํ”„๋กœ์„ธ์Šค ์ •๋ณด ํ”„๋กœ์„ธ์Šค ๊ตฌ์กฐ, ์ƒํƒœ, ps, sysinfo ํ•จ์ˆ˜ ๋“ฑ


๐Ÿงญ Part 1. ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ดํ•ด

(Understanding UNIX/Linux System Programming)


๐ŸŽฏ Contents

- ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จ๋œ ํ‘œ์ค€์„ ์ดํ•ดํ•œ๋‹ค.

- ์‹œ์Šคํ…œ ํ˜ธ์ถœ(System Call) vs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜(Library Function)

- C compiler, make ๋„๊ตฌ ์‚ฌ์šฉ


๐Ÿงฉ 01. ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€

(What is Linux/UNIX System Programming?)

๐Ÿ–ฅ๏ธ ๋ฆฌ๋ˆ…์Šค์™€ ์œ ๋‹‰์Šค (Linux and UNIX)

  • ๋ฆฌ๋ˆ…์Šค์™€ ์œ ๋‹‰์Šค๋Š” ์„œ๋ฒ„์šฉ ์šด์˜์ฒด์ œ(OS) ๋กœ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
    (Linux and UNIX are primarily used as server operating systems.)
  • ์ตœ๊ทผ์—๋Š” ์œ ๋‹‰์Šค(UNIX) ๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ๋ฆฌ๋ˆ…์Šค(Linux) ๊ฐ€ ์„œ๋ฒ„ ์šด์˜์ฒด์ œ ์‹œ์žฅ์„ ์ฃผ๋„ํ•˜๊ณ  ์žˆ๋‹ค.
    (Recently, Linux has replaced traditional UNIX systems and dominates the server OS market.)
  • ํŠนํžˆ ๊ธˆ์œต๊ถŒ ๋“ฑ์—์„œ๋Š” ๊ธฐ์กด์˜ ์œ ๋‹‰์Šค ์‹œ์Šคํ…œ์„ ๋ฆฌ๋ˆ…์Šค๋กœ ์ „ํ™˜ํ•˜๋Š” U2L(Migration: UNIX to Linux) ์ด ํ™•์‚ฐ๋˜๊ณ  ์žˆ๋‹ค.
    (In financial industries, UNIX to Linux migration (U2L) has been widely adopted.)

โš™๏ธ ์‹œ์Šคํ…œ ํ˜ธ์ถœ (System Call)

์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค.

  • ์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ํ”„๋กœ๊ทธ๋žจ์ด ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค.
    (Provides an interface for programs to use kernel-level services directly.)
  • ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋Œ€๋ถ€๋ถ„์€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

๐Ÿ“Œ ์˜ˆ์‹œ:

 
int open(const char *pathname, int flags);
  • open()์€ ํŒŒ์ผ์„ ์—ฌ๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด๋‹ค.
  • ํŒŒ์ผ ์ ‘๊ทผ, ํ”„๋กœ์„ธ์Šค ์ œ์–ด, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋“ฑ ๊ฑฐ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ†ตํ•ด ์ œ๊ณต๋œ๋‹ค.

๐Ÿงพ 02. ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์‹œ์Šคํ…œ ํ‘œ์ค€ (Standards of UNIX/Linux Systems)

๐Ÿ›๏ธ ์œ ๋‹‰์Šค์˜ ๊ฐœ๋ฐœ (Development of UNIX)

  • 1969๋…„, ๋ฏธ๊ตญ AT&T ๋ฒจ ์—ฐ๊ตฌ์†Œ(Bell Labs) ์˜ Ken Thompson ๊ณผ Dennis Ritchie ๊ฐ€ ๊ฐœ๋ฐœ.
    (Developed in 1969 by Ken Thompson and Dennis Ritchie at AT&T Bell Labs.)
  • ์ดˆ๊ธฐ์—๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋‚˜, 1973๋…„ C์–ธ์–ด๋กœ ๋‹ค์‹œ ์ž‘์„ฑ๋˜์–ด
    โžค “๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ตœ์ดˆ์˜ ์šด์˜์ฒด์ œ” ๋กœ ํ‰๊ฐ€๋ฐ›๋Š”๋‹ค.
    (Rewritten in C language in 1973, becoming the first OS written in a high-level language.)

๐Ÿงฎ ์œ ๋‹‰์Šค์˜ ๊ธฐ๋Šฅ (Features of UNIX)

  • ์ดˆ๊ธฐ์— ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ๋Œ€ํ•™๊ต, ๊ธฐ์—… ๋“ฑ์—์„œ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
  • ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ํŒŒ์ƒ ๋ฒ„์ „(Variants) ์ด ์ƒ๊ฒจ๋‚จ.
    • AT&T ๊ณ„์—ด → System V
    • ๋ฒ„ํด๋ฆฌ ๋Œ€ํ•™ ๊ณ„์—ด → BSD (Berkeley Software Distribution)
  • BSD ๋ฒ„์ „์—์„œ๋Š” TCP/IP ๊ธฐ๋ฐ˜ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด, ํ˜„๋Œ€ ๋ฆฌ๋ˆ…์Šค ๋„คํŠธ์›Œํ‚น์˜ ๊ธฐ๋ฐ˜์ด ๋จ.
    (BSD added TCP/IP networking, which influenced modern Linux networking.)

๐Ÿงฑ ์œ ๋‹‰์Šค์˜ ๋ฐœ์ „ (Evolution of UNIX)

  • 1991๋…„, Linus Torvalds ๊ฐ€ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋กœ ๋ฆฌ๋ˆ…์Šค(Linux)๋ฅผ ๋ฐœํ‘œ.
    (In 1991, Linus Torvalds released Linux as an open-source OS.)
  • ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœ๋˜๋ฉด์„œ ์ˆ˜๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฐธ์—ฌํ•ด ๋น ๋ฅด๊ฒŒ ๋ฐœ์ „.
  • ํ˜„์žฌ๋Š” ํ•˜๋‚˜์˜ ์ปค๋„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜๋งŽ์€ ๋ฐฐํฌํŒ(Distribution) ์ด ์กด์žฌํ•œ๋‹ค.
    ์˜ˆ: Ubuntu, Fedora, CentOS, Debian ๋“ฑ.

๐Ÿงพ 03. ์œ ๋‹‰์Šค์˜ ์ฃผ์š” ํ‘œ์ค€ (Major UNIX Standards)

1๏ธโƒฃ ANSI C ํ‘œ์ค€ (ANSI C Standard)

  • ๋ฏธ๊ตญํ‘œ์ค€ํ˜‘ํšŒ(ANSI)๊ฐ€ ์ œ์ •ํ•œ C ์–ธ์–ด ํ‘œ์ค€ ๊ทœ๊ฒฉ.
  • C ์–ธ์–ด ๋ฌธ๋ฒ•, ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ—ค๋” ํŒŒ์ผ ๋“ฑ์„ ์ •์˜.
  • ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋Œ€๋ถ€๋ถ„ ์ด ํ‘œ์ค€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ.

2๏ธโƒฃ POSIX (Portable Operating System Interface)

  • ์œ ๋‹‰์Šค ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ ๊ฐ„ ์ด์‹์„ฑ(Portability) ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์šด์˜์ฒด์ œ ์ธํ„ฐํŽ˜์ด์Šค ํ‘œ์ค€.
  • IEEE์—์„œ ์ •์˜ํ•œ ๊ทœ๊ฒฉ์ด๋ฉฐ, ์œ ๋‹‰์Šค ๊ณ„์—ด OS์˜ ๊ณตํ†ต API๋ฅผ ๊ทœ์ •ํ•จ.
  • ์‹œ์Šคํ…œ ํ˜ธ์ถœ๊ณผ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์˜ ๋™์ž‘ ๋ฐฉ์‹์ด ํ‘œ์ค€ํ™”๋˜์–ด ์žˆ์Œ.

๐Ÿ“Œ ์˜ˆ์‹œ: fork(), read(), write() ํ•จ์ˆ˜๋“ค์€ POSIX ํ‘œ์ค€์— ๋”ฐ๋ผ ์ •์˜๋จ.


3๏ธโƒฃ X/Open ๊ฐ€์ด๋“œ (X/Open Guide)

  • 1984๋…„, ์œ ๋Ÿฝ์˜ ์œ ๋‹‰์Šค ์ œ์กฐ์—…์ฒด๋“ค์ด ์„ค๋ฆฝํ•œ ๋‹จ์ฒด X/Open ์—์„œ ์ œ์•ˆํ•œ ํ‘œ์ค€.
  • ๋ชฉํ‘œ: ์„œ๋กœ ๋‹ค๋ฅธ ์œ ๋‹‰์Šค ์‹œ์Šคํ…œ์—์„œ๋„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ์ด์‹์„ฑ ๊ฐ•ํ™”.
  • 1988๋…„ ๋ฐœํ‘œ๋œ XPG3 ์— POSIX ํ†ตํ•ฉ, 1992๋…„ ๋ฐœํ‘œ๋œ XPG4 ๊ฐ€ ์ตœ์ข… ๋ฒ„์ „.

4๏ธโƒฃ ๋‹จ์ผ ์œ ๋‹‰์Šค ๋ช…์„ธ (SUS, Single UNIX Specification)

  • “์œ ๋‹‰์Šค”๋ผ๋Š” ์ด๋ฆ„์„ ๊ณต์‹์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€์˜ ์ด์นญ.
  • IEEE, ISO, The Open Group์ด ๊ณต๋™์œผ๋กœ ๊ฐœ๋ฐœ/ํ‘œ์ค€ํ™”ํ•œ ๊ฒฐ๊ณผ๋ฌผ.
  • ์˜ค์Šคํ‹ด ๊ทธ๋ฃน์ด ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€/๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹น
  • 1980๋…„๋Œ€ ์ค‘๋ฐ˜๋ถ€ํ„ฐ ์‹œ์ž‘๋œ ์œ ๋‹‰์Šค์˜ ์‹œ์Šคํ…œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์ถœ๋ฐœ
  • ํ˜„์žฌ์˜ POSIX ํ‘œ์ค€๋„ SUS์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

๐Ÿ“Œ ์ฆ‰, POSIX ⊂ SUS (POSIX๋Š” SUS์˜ ์ผ๋ถ€์ž„)


5๏ธโƒฃ SVID (System V Interface Definition)

  • AT&T์˜ System V UNIX ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜.
  • ํ”„๋กœ๊ทธ๋žจ๊ณผ ์žฅ์น˜๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋ฐ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ด€ํ•œ ํ‘œ์ค€ ํฌํ•จ.
  • POSIX์™€ X/Open์˜ ๊ธฐ์ดˆ๊ฐ€ ๋˜์—ˆ์Œ.
  • 1995๋…„ ๋ฐœํ‘œ๋œ SVID ๋ฒ„์ „ 4๋Š” XPG4 ๋ฐ POSIX 1003.1-1990๊ณผ ํ˜ธํ™˜๋จ.
  • SVID๋Š” POSIX์™€ ๋‹จ์ผ ์œ ๋‹‰์Šค ๋ช…์„ธ์— ํฌํ•จ๋˜๋ฉด์„œ ์ค‘์š”๋„๊ฐ€ ๋–จ์–ด์ง

โš™๏ธ 04. ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (System Programming)

๐Ÿงฉ ์‹œ์Šคํ…œ ํ˜ธ์ถœ vs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (Library) : ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํ•จ์ˆ˜๋ฅผ ๋ฌถ์–ด์„œ ์ œ๊ณตํ•˜๋Š” ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์˜ ํŒŒ์ผ
๊ตฌ๋ถ„ ์‹œ์Šคํ…œ ํ˜ธ์ถœ (System Call) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜ (Library Function)
์ •์˜ ์ปค๋„์˜ ์„œ๋น„์Šค๋ฅผ ์ง์ ‘ ์š”์ฒญํ•˜๋Š” ํ•จ์ˆ˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๊ฐ์‹ธ๊ฑฐ๋‚˜ ์‘์šฉ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ํ•จ์ˆ˜
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋œ ํ•จ์ˆ˜
์œ„์น˜ ์ปค๋„ ์˜์—ญ(Kernel Space) ์‚ฌ์šฉ์ž ์˜์—ญ(User Space)
์˜ˆ์‹œ read(), write(), fork() printf(), fopen()
ํ˜ธ์ถœ ๋ฐฉ์‹ ์ปค๋„ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ํ˜ธ์ถœ ๋‚ด๋ถ€์ ์œผ๋กœ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ด์šฉํ•จ
์†๋„ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆผ(์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋ฐœ์ƒ) ๋น ๋ฆ„(์œ ์ € ๋ ˆ๋ฒจ ์‹คํ–‰)
    - ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•  ๋•Œ ๊ฐ™์ด ์ ์žฌ๋˜์–ด ์‹คํ–‰ ํŒŒ์ผ์„ ๊ตฌ์„ฑ
- ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ์‹คํ–‰ ํŒŒ์ผ์— ํฌํ•จ๋˜์ง€ ์•Š์•„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

๐Ÿ’ก man ํŽ˜์ด์ง€ (Manual Page)

๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค์˜ ๋ชจ๋“  ๋ช…๋ น, ์‹œ์Šคํ…œ ํ˜ธ์ถœ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€.

๋งค๋‰ด์–ผ์€ ํ•ญ๋ชฉ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์„น์…˜์ด ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Œ.

๊ตฌ๋ถ„ ์„น์…˜ ๋ฒˆํ˜ธ  
1 ์ผ๋ฐ˜ ๋ช…๋ น์–ด (User commands) ๋ฆฌ๋ˆ…์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ช…๋ น์— ๋Œ€ํ•œ ์„ค๋ช…
2 ์‹œ์Šคํ…œ ํ˜ธ์ถœ (System calls)  
3 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜ (Library functions)  
4 ๋””๋ฐ”์ด์Šค ํŒŒ์ผ (Devices)  
5 ์„ค์ • ํŒŒ์ผ ํ˜•์‹ (File formats)  
6 ๊ฒŒ์ž„ (Games)  
7 ๊ธฐํƒ€ (Miscellaneous)  
8 ๊ด€๋ฆฌ์ž ๋ช…๋ น์–ด (Admin commands)  

- man ๋ช…๋ น์œผ๋กœ ๊ฒ€์ƒ‰ ์‹œ ์„น์…˜ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฒƒ์ด ๊ธฐ๋ณธ์œผ๋กœ ์ถœ๋ ฅ๋จ.

- man ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ˜•์‹์€ ๋ฆฌ๋ˆ…์Šค์™€ ์œ ๋‹‰์Šค์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์Œ.

 

์˜ˆ์‹œ ๋ช…๋ น:

man 2 open

→ ์‹œ์Šคํ…œ ํ˜ธ์ถœ open()์˜ ๋งค๋‰ด์–ผ ํ™•์ธ

man 3 printfโ€‹

→ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜ printf()์˜ ๋งค๋‰ด์–ผ ํ™•์ธ

 

OPEN(2)    Linux Programmer's Manual  
open, openat, creat — open and possibly create a file  

FOPEN(3)   Linux Programmer's Manual  
fopen, fdopen, freopen — stream open functions

 

 

 

[์ถ”๊ฐ€๋œ ๋‚ด์šฉ]

  • man ๊ฒฐ๊ณผ๋Š” ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์œ ๋‹‰์Šค(์˜ˆ: Solaris)์—์„œ๋Š” man open ์ž…๋ ฅ ์‹œ (2)๊ฐ€ ๋ถ™์€ open(2) ์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค.
  • ์„น์…˜ ๋ฒˆํ˜ธ๋Š” ๋ช…๋ น, ํ•จ์ˆ˜๊ฐ€ ์ค‘๋ณต๋  ๋•Œ ๊ตฌ๋ถ„์šฉ์œผ๋กœ ์ค‘์š”ํ•˜๋‹ค.

๐Ÿง  ํ•ต์‹ฌ ์š”์•ฝ (Summary)

ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ์„ค๋ช…
System Call ์ปค๋„๊ณผ ์ง์ ‘ ํ†ต์‹ ํ•˜๋Š” ์ €์ˆ˜์ค€ ํ•จ์ˆ˜
Library Function ํŽธ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ณ ์ˆ˜์ค€ ํ•จ์ˆ˜
POSIX ์œ ๋‹‰์Šค ๊ณ„์—ด ์‹œ์Šคํ…œ์˜ ๊ณตํ†ต ํ‘œ์ค€
SUS ๋‹จ์ผ ์œ ๋‹‰์Šค ๋ช…์„ธ, POSIX ํฌํ•จ
SVID System V UNIX ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค
man ๋ช…๋ น ์‹œ์Šคํ…œ ๋ช…๋ น ๋ฐ ํ•จ์ˆ˜์˜ ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€ ์กฐํšŒ

โœจ [์ถ”๊ฐ€๋œ ๋‚ด์šฉ ์š”์•ฝ]

  • [์ถ”๊ฐ€๋œ ๋‚ด์šฉ]์—๋Š” ๊ต์žฌ ์›๋ฌธ์— ๋ถ€์กฑํ–ˆ๋˜ ๋ฐฐ๊ฒฝ ์„ค๋ช…๊ณผ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์‹ค๋ฌด์  ๋งฅ๋ฝ์„ ๋ณด์ถฉํ•จ.
  • ํŠนํžˆ POSIX์™€ SUS์˜ ๊ด€๊ณ„, man ํŽ˜์ด์ง€ ๊ตฌ์กฐ, System Call vs Library Function ์ฐจ์ด๋ฅผ ๋ช…ํ™•ํžˆ ์ •๋ฆฌ.
  • ๊ต์žฌ์šฉ ๋ฌธ์„œ๋กœ ํ™œ์šฉ ์‹œ, ๊ฐ ํ‘œ ์•„๋ž˜์— ์‹ค์Šต ์˜ˆ์‹œ(open, printf, man)๋ฅผ ์ง์ ‘ ๋”ฐ๋ผํ•ด๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ.


๐Ÿงฉ ์˜ˆ์ œ 1-1 ์‹œ์Šคํ…œ ํ˜ธ์ถœ์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌํ•˜๊ธฐ


๐Ÿ’ก ๊ฐœ๋… ์ •๋ฆฌ

์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ system call(์‹œ์Šคํ…œ ํ˜ธ์ถœ)์€ ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ์ผ ์กด์žฌ ํ™•์ธ (access()), ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ (fork()), ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น (malloc()) ๋“ฑ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ˜น์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค.

์‹œ์Šคํ…œ ํ˜ธ์ถœ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฆฌํ„ด๊ฐ’์œผ๋กœ –1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ ,
์ „์—ญ ๋ณ€์ˆ˜ errno ์— ์˜ค๋ฅ˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•œ๋‹ค.
์ด errno ๋Š” ์—๋Ÿฌ์˜ ์›์ธ์„ ํ‘œ์ค€ํ™”๋œ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.


๐Ÿงพ ์†Œ์Šค์ฝ”๋“œ

01 #include <stdio.h>
02 #include <unistd.h>
03 #include <errno.h>

05 extern int errno;

07 int main() {
08     if (access("test.txt", F_OK) == -1) {
09         printf("errno = %d\n", errno);
10     }
11 }

๐Ÿ“˜ ์ฝ”๋“œ ํ•ด์„ค

ํ–‰๋‚ด์šฉ์„ค๋ช…
05 extern int errno; ์ „์—ญ ๋ณ€์ˆ˜ errno ๋ฅผ ์™ธ๋ถ€์—์„œ ์ฐธ์กฐ ํ•จ. ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์‹คํŒจํ•  ๋•Œ ์—๋Ÿฌ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅ.
08 access("test.txt", F_OK) ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— test.txt ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ. ์—†์œผ๋ฉด –1 ๋ฆฌํ„ด.
09 printf("errno = %d\n", errno); ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ errno ์˜ ๊ฐ’์„ ์ถœ๋ ฅ.

๐Ÿงฉ ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ฐ ํ•ด์„ค

  • test.txt ํŒŒ์ผ์ด ์—†์„ ๊ฒฝ์šฐ → access() ๊ฐ€ –1 ๋ฆฌํ„ด
  • errno ๊ฐ’์€ 2 (์ฆ‰, “๊ทธ๋Ÿฐ ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์—†์Œ — No such file or directory”)
  • ์ด ๊ฐ’์€ ์‹œ์Šคํ…œ ํ—ค๋” errno.h ์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ,
    ๊ฐ ์ˆซ์ž ์ฝ”๋“œ๋Š” man errno ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿง  ์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

$ gcc -o example1 example1.c
$ ./example1
errno = 2

๐Ÿง  [์ถ”๊ฐ€๋œ ๋‚ด์šฉ]

  • errno ๋Š” ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์Šค๋ ˆ๋“œ ๋ณ„๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. (POSIX ํ‘œ์ค€)
  • perror() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด errno ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด errno = 2์ผ ๋•Œ → ์ถœ๋ ฅ: Error Message: No such file or directory
perror("Error Message");
  • ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์‹คํŒจ ์‹œ ํ•ญ์ƒ errno ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ด๋Š” ๋””๋ฒ„๊น… ๋ฐ ์—๋Ÿฌ ๋กœ๊น…์— ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

โš™๏ธ ์ •๋ฆฌ

ํ•ญ๋ชฉ์„ค๋ช…

 

์‹œ์Šคํ…œ ํ˜ธ์ถœ ์šด์˜์ฒด์ œ ๊ธฐ๋Šฅ์„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค
errno ์ „์—ญ ๋ณ€์ˆ˜, ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์‹คํŒจ ์‹œ ์—๋Ÿฌ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅ
access() ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ
F_OK ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋งคํฌ๋กœ
perror() errno ์— ํ•ด๋‹นํ•˜๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ถœ๋ ฅ


๐Ÿงฉ ์˜ˆ์ œ 1-2. ํŒŒ์ผ ์—ด๊ธฐ — open()

 
01 #include <fcntl.h>
02 #include <unistd.h>
03 #include <stdio.h>

05 int main() {
06     int fd;
07     fd = open("sample.txt", O_RDONLY);
08     if (fd == -1) {
09         perror("open");
10     } else {
11         printf("File opened successfully!\n");
12         close(fd);
13     }
}

๐Ÿ“˜ ์„ค๋ช…

  • open()์€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋กœ ํŒŒ์ผ์„ ์—ด๊ณ  ํŒŒ์ผ ๊ธฐ์ˆ ์ž(fd)๋ฅผ ๋ฆฌํ„ด.
  • ์‹คํŒจ ์‹œ –1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  errno ์„ค์ •.
  • O_RDONLY, O_WRONLY, O_RDWR ๋“ฑ์˜ ์ ‘๊ทผ ๋ชจ๋“œ ์ง€์ • ๊ฐ€๋Šฅ.

[์ถ”๊ฐ€๋œ ๋‚ด์šฉ]

  • ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ O_CREAT ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ์ƒ์„ฑ ๊ฐ€๋Šฅ.
  • perror()๋ฅผ ํ†ตํ•ด ๋ช…ํ™•ํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

 

๐Ÿ”  ๋กœ๊ทธ์ธ / ๋กœ๊ทธ์•„์›ƒ ๋ช…๋ น 

login ์‹œ์Šคํ…œ ๋กœ๊ทธ์ธ (๋ณดํ†ต ์ฝ˜์†”์—์„œ ์ž๋™ ์ˆ˜ํ–‰) login user1
logout / exit ๋กœ๊ทธ์ธ ์„ธ์…˜ ์ข…๋ฃŒ logout
exit
who / w ํ˜„์žฌ ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž ํ™•์ธ who, w
last ์ตœ๊ทผ ๋กœ๊ทธ์ธ ๊ธฐ๋ก ์กฐํšŒ last -n 5

๐Ÿ“  ํŒŒ์ผ / ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ช…๋ น 

ls ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ชฉ๋ก ์ถœ๋ ฅ ls -l, ls -a
cd ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™ cd /etc, cd ..
pwd ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ ํ‘œ์‹œ pwd
cp ํŒŒ์ผ/๋””๋ ‰ํ„ฐ๋ฆฌ ๋ณต์‚ฌ cp file1 file2, cp -r dir1 dir2
mv ํŒŒ์ผ/๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™ ๋˜๋Š” ์ด๋ฆ„ ๋ณ€๊ฒฝ mv a.txt b.txt
rm ํŒŒ์ผ ์‚ญ์ œ (๋ณต๊ตฌ ๋ถˆ๊ฐ€) rm -f tmp.txt
rm -r folder
mkdir / rmdir ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ / ์‚ญ์ œ mkdir test, rmdir old
cat / more / less ํŒŒ์ผ ๋‚ด์šฉ ์ถœ๋ ฅ cat file.txt
less /etc/passwd
touch ์ƒˆ ํŒŒ์ผ ์ƒ์„ฑ ๋˜๋Š” ์ˆ˜์ •์‹œ๊ฐ„ ๊ฐฑ์‹  touch new.txt
stat / file ํŒŒ์ผ ์†์„ฑ ๋ฐ ํƒ€์ž… ํ™•์ธ stat hello.c
file a.out

โšก ํ”„๋กœ์„ธ์Šค ๋ช…๋ น

ps ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก ps -ef, ps aux
top / htop ์‹ค์‹œ๊ฐ„ ํ”„๋กœ์„ธ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง top
kill / killall ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ kill -9 1234, killall vim
bg / fg ๋ฐฑ๊ทธ๋ผ์šด๋“œ / ํฌ๊ทธ๋ผ์šด๋“œ ์ „ํ™˜ fg %1
jobs ํ˜„์žฌ ์…ธ ์ž‘์—… ๋ชฉ๋ก jobs
nohup ๋กœ๊ทธ์•„์›ƒ ํ›„์—๋„ ์‹คํ–‰ ์œ ์ง€ nohup ./server &

๐Ÿงฐ ๊ธฐํƒ€ ๋ช…๋ น

 

chmod ํŒŒ์ผ ๊ถŒํ•œ ๋ณ€๊ฒฝ chmod 755 run.sh
chown ํŒŒ์ผ ์†Œ์œ ์ž ๋ณ€๊ฒฝ chown user:group file
find ํŒŒ์ผ ๊ฒ€์ƒ‰ find /home -name "*.c"
grep ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ grep "main" *.c
tar / zip / gzip ์••์ถ• ๋ฐ ์•„์นด์ด๋ธŒ tar -cvf backup.tar dir/
df / du ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ df -h
du -sh *
ssh / scp ์›๊ฒฉ ์ ‘์† ๋ฐ ๋ณต์‚ฌ ssh user@host
scp file user@host:/dir
sudo ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ๋ช…๋ น ์‹คํ–‰ sudo apt update
man ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€ ์กฐํšŒ man 2 open
man 3 printf

โœ๏ธ vi ๋‚ด๋ถ€ ๋ช…๋ น

i ํ˜„์žฌ ์ปค์„œ ์œ„์น˜์—์„œ ์ž…๋ ฅ ๋ชจ๋“œ๋กœ ์ „ํ™˜
I ํ˜„์žฌ ์ค„์˜ ๋งจ ์•ž์—์„œ ์ž…๋ ฅ ์‹œ์ž‘
a ์ปค์„œ ๋‹ค์Œ ์œ„์น˜์—์„œ ์ž…๋ ฅ ์‹œ์ž‘
A ํ˜„์žฌ ์ค„์˜ ๋์—์„œ ์ž…๋ ฅ ์‹œ์ž‘
o ํ˜„์žฌ ์ค„ ์•„๋ž˜ ์ƒˆ ์ค„์„ ์—ด๊ณ  ์ž…๋ ฅ
O ํ˜„์žฌ ์ค„ ์œ„์— ์ƒˆ ์ค„์„ ์—ด๊ณ  ์ž…๋ ฅ
ESC ์ž…๋ ฅ ๋ชจ๋“œ์—์„œ ๋ช…๋ น ๋ชจ๋“œ๋กœ ๋ณต๊ท€
: ๋งˆ์ง€๋ง‰ ์ค„ ๋ชจ๋“œ๋กœ ์ „ํ™˜ (์ €์žฅ·์ข…๋ฃŒ ๋“ฑ ๋ช…๋ น ์ž…๋ ฅ)
:w ํŒŒ์ผ ์ €์žฅ (write)
:q ์ข…๋ฃŒ (quit), ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์—†์„ ๋•Œ๋งŒ ๊ฐ€๋Šฅ
:wq ์ €์žฅ ํ›„ ์ข…๋ฃŒ (write + quit)
ZZ ์ €์žฅ ํ›„ ์ข…๋ฃŒ (Shift+ZZ, ๋ช…๋ น ๋ชจ๋“œ์—์„œ ์‹คํ–‰)
:q! ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๊ฐ•์ œ ์ข…๋ฃŒ
:x ์ €์žฅ ํ›„ ์ข…๋ฃŒ (:wq์™€ ๋™์ผ ๋™์ž‘)
h ์™ผ์ชฝ์œผ๋กœ ํ•œ ๋ฌธ์ž ์ด๋™
l ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ๋ฌธ์ž ์ด๋™
j ํ•œ ์ค„ ์•„๋ž˜๋กœ ์ด๋™
k ํ•œ ์ค„ ์œ„๋กœ ์ด๋™
0 ํ˜„์žฌ ์ค„์˜ ๋งจ ์•ž์œผ๋กœ ์ด๋™
^ ํ˜„์žฌ ์ค„์˜ ์ฒซ ๋น„๊ณต๋ฐฑ ๋ฌธ์ž๋กœ ์ด๋™
$ ํ˜„์žฌ ์ค„์˜ ๋งจ ๋์œผ๋กœ ์ด๋™
G ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰ ์ค„๋กœ ์ด๋™
gg ํŒŒ์ผ์˜ ์ฒซ ์ค„๋กœ ์ด๋™
Ctrl + f ํ•œ ํ™”๋ฉด ์•„๋ž˜๋กœ ์Šคํฌ๋กค (page down)
Ctrl + b ํ•œ ํ™”๋ฉด ์œ„๋กœ ์Šคํฌ๋กค (page up)
x ์ปค์„œ ์œ„์น˜์˜ ๋ฌธ์ž ์‚ญ์ œ
dd ํ˜„์žฌ ์ค„ ์‚ญ์ œ
3dd ํ˜„์žฌ ์ค„๋ถ€ํ„ฐ 3์ค„ ์‚ญ์ œ
dw ์ปค์„œ ์œ„์น˜์—์„œ ๋‹จ์–ด ์‚ญ์ œ
cw ๋‹จ์–ด ๋ณ€๊ฒฝ (์‚ญ์ œ ํ›„ ์ž…๋ ฅ ๋ชจ๋“œ ์ง„์ž…)
yy ํ˜„์žฌ ์ค„ ๋ณต์‚ฌ (yank)
3yy ํ˜„์žฌ ์ค„๋ถ€ํ„ฐ 3์ค„ ๋ณต์‚ฌ
p ๋ถ™์—ฌ๋„ฃ๊ธฐ (put)
u ์ตœ๊ทผ ๋ช…๋ น ์ทจ์†Œ (undo)
U ํ˜„์žฌ ์ค„ ์ „์ฒด๋ฅผ ์ด์ „ ์ƒํƒœ๋กœ ๋ณต์›
Ctrl + r ๋˜๋Œ๋ฆฌ๊ธฐ ์ทจ์†Œ (redo)
. ์ง์ „ ๋ช…๋ น ๋ฐ˜๋ณต ์ˆ˜ํ–‰
/๋ฌธ์ž์—ด ๋ฌธ์ž์—ด์„ ์•ž๋ฐฉํ–ฅ์œผ๋กœ ๊ฒ€์ƒ‰
?๋ฌธ์ž์—ด ๋ฌธ์ž์—ด์„ ๋’ค๋ฐฉํ–ฅ์œผ๋กœ ๊ฒ€์ƒ‰
n ๋‹ค์Œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ์ด๋™
N ์ด์ „ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ์ด๋™
:s/old/new/ ํ˜„์žฌ ์ค„์—์„œ ์ฒซ ๋ฒˆ์งธ old๋ฅผ new๋กœ ์น˜ํ™˜
:s/old/new/g ํ˜„์žฌ ์ค„์˜ ๋ชจ๋“  old๋ฅผ new๋กœ ์น˜ํ™˜
:1,$s/old/new/g ํŒŒ์ผ ์ „์ฒด์—์„œ old๋ฅผ new๋กœ ์น˜ํ™˜
:%s/old/new/gc ํŒŒ์ผ ์ „์ฒด ์น˜ํ™˜ (ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ ๋ณ€๊ฒฝ)
Ctrl + g ํ˜„์žฌ ํŒŒ์ผ๋ช…, ์ค„ ๋ฒˆํ˜ธ, ์œ„์น˜ ์ •๋ณด ํ‘œ์‹œ
Ctrl + d ๋ฐ˜ ํŽ˜์ด์ง€ ์•„๋ž˜๋กœ ์Šคํฌ๋กค
Ctrl + u ๋ฐ˜ ํŽ˜์ด์ง€ ์œ„๋กœ ์Šคํฌ๋กค
:set nu ์ค„ ๋ฒˆํ˜ธ ํ‘œ์‹œ (number on)
:set nonu ์ค„ ๋ฒˆํ˜ธ ์ˆจ๊น€ (number off)
:!command vi ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€ ๋ช…๋ น ์‹คํ–‰ (:!ls, :!gcc)
:r file ์™ธ๋ถ€ ํŒŒ์ผ ๋‚ด์šฉ์„ ํ˜„์žฌ ํŽธ์ง‘ ์ค‘์ธ ํŒŒ์ผ์— ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

 


๐Ÿ”ง ์ปดํŒŒ์ผ ํ™˜๊ฒฝ ์š”์•ฝ

 

โ‘  ์ „์ฒ˜๋ฆฌ #include, #define ์ฒ˜๋ฆฌ .i gcc -E main.c -o main.i
โ‘ก ์ปดํŒŒ์ผ C ์ฝ”๋“œ → ์–ด์…ˆ๋ธ”๋ฆฌ์–ด .s gcc -S main.c -o main.s
โ‘ข ์–ด์…ˆ๋ธ” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด → ์˜ค๋ธŒ์ ํŠธ .o gcc -c main.c -o main.o
โ‘ฃ ๋งํฌ ์˜ค๋ธŒ์ ํŠธ + ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ → ์‹คํ–‰ํŒŒ์ผ a.out ๋˜๋Š” ์ง€์ •๋ช… gcc main.o -o main

๐Ÿงฐ gcc ์ฃผ์š” ์˜ต์…˜

-o ์‹คํ–‰ํŒŒ์ผ ์ด๋ฆ„ ์ง€์ • gcc main.c -o app
-c ์ปดํŒŒ์ผ๋งŒ ์ˆ˜ํ–‰ (๋งํฌ X) gcc -c util.c
-Wall ๋ชจ๋“  ๊ฒฝ๊ณ  ํ‘œ์‹œ gcc -Wall main.c
-g ๋””๋ฒ„๊น… ์‹ฌ๋ณผ ํฌํ•จ gcc -g test.c
-O, -O2, -O3 ์ตœ์ ํ™” ๋ ˆ๋ฒจ ์„ค์ • gcc -O2 main.c
-I<dir> ํ—ค๋” ํŒŒ์ผ ๊ฒฝ๋กœ ์ถ”๊ฐ€ gcc -Iinclude main.c
-L<dir> -l<name> ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งํฌ gcc -Llib -lmylib main.c

๐Ÿ—๏ธ Makefile ๊ธฐ๋ณธ ๊ตฌ์กฐ

TARGET ์ตœ์ข… ์‹คํ–‰ํŒŒ์ผ ์ด๋ฆ„ TARGET = myapp
OBJS ํ•„์š”ํ•œ ์˜ค๋ธŒ์ ํŠธ ๋ชฉ๋ก OBJS = main.o util.o
CC ์‚ฌ์šฉํ•  ์ปดํŒŒ์ผ๋Ÿฌ CC = gcc
CFLAGS ์ปดํŒŒ์ผ ์˜ต์…˜ CFLAGS = -Wall -g
๊ทœ์น™ (Rule) ๋นŒ๋“œ ๋ฐฉ๋ฒ• ์ •์˜ $(TARGET): $(OBJS)
๋ช…๋ น (Command) ์‹คํ–‰ํ•  gcc ๋ช…๋ น $(CC) $(CFLAGS) -o $(TARGET) $(OBJS)
clean ์ •๋ฆฌ์šฉ ๋ช…๋ น rm -f $(TARGET) $(OBJS)

๐Ÿ”—  gcc vs make ๋น„๊ต 

์—ญํ•  ์ปดํŒŒ์ผ๋Ÿฌ ๋นŒ๋“œ ์ž๋™ํ™” ๋„๊ตฌ
์ž…๋ ฅ .c, .cpp ํŒŒ์ผ Makefile
์ถœ๋ ฅ ์‹คํ–‰ํŒŒ์ผ (a.out, ์ง€์ •๋ช…) ์‹คํ–‰ํŒŒ์ผ (๋‚ด๋ถ€์ ์œผ๋กœ gcc ํ˜ธ์ถœ)
์‚ฌ์šฉ ๋Œ€์ƒ ์†Œ๊ทœ๋ชจ / ๋‹จ์ผ ํŒŒ์ผ ๋Œ€๊ทœ๋ชจ / ๋‹ค์ค‘ ํŒŒ์ผ ํ”„๋กœ์ ํŠธ
๋นŒ๋“œ ๋ฐฉ์‹ ๋งค๋ฒˆ ์ „์ฒด ์žฌ์ปดํŒŒ์ผ ์ˆ˜์ •๋œ ํŒŒ์ผ๋งŒ ์žฌ์ปดํŒŒ์ผ
์˜ˆ์‹œ gcc main.c -o main make (Makefile ํ•„์š”)

 

 


โš™๏ธ gcc vs make ์ฐจ์ด์ 

(Difference Between gcc and make)


๐Ÿงฑ 1๏ธโƒฃ ํ•œ ์ค„ ์š”์•ฝ

๋ช…๋ น์—ญํ• 
๐Ÿงฐ gcc ์ปดํŒŒ์ผ๋Ÿฌ” — C/C++ ํŒŒ์ผ์„ ์ง์ ‘ ์ปดํŒŒ์ผํ•˜๊ณ  ๋งํฌํ•จ
๐Ÿงฎ make ๋นŒ๋“œ ์ž๋™ํ™” ๋„๊ตฌ” — ์—ฌ๋Ÿฌ ์†Œ์Šค ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  gcc ๋ช…๋ น์„ ๋Œ€์‹  ์‹คํ–‰ํ•จ

๐Ÿ’ก 2๏ธโƒฃ ๊ฐœ๋… ๋น„๊ต

๊ตฌ๋ถ„gccmake
์ •์˜ GNU Compiler Collection — C, C++, etc.๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๋„๊ตฌ Build Automation Tool — ์ปดํŒŒ์ผ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๋Š” ๋„๊ตฌ
ํ•˜๋Š” ์ผ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ (์ปดํŒŒ์ผ ๋ฐ ๋งํฌ ์ˆ˜ํ–‰) gcc ๋ช…๋ น์„ ์—ฌ๋Ÿฌ ๋ฒˆ, ์ž๋™์œผ๋กœ ์‹คํ–‰
์ž…๋ ฅ ๋Œ€์ƒ .c, .cpp ํŒŒ์ผ Makefile (๊ทœ์น™์ด ์ ํžŒ ์„ค์ • ํŒŒ์ผ)
์ถœ๋ ฅ ๊ฒฐ๊ณผ ์‹คํ–‰ํŒŒ์ผ (.out, .exe) ์ตœ์ข… ์‹คํ–‰ํŒŒ์ผ (๋‚ด๋ถ€์ ์œผ๋กœ gcc ์‚ฌ์šฉ)
์–ธ์ œ ์‚ฌ์šฉ ํŒŒ์ผ 1~2๊ฐœ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ปดํŒŒ์ผํ•  ๋•Œ ํ”„๋กœ์ ํŠธ ๋‹จ์œ„(ํŒŒ์ผ ์ˆ˜์‹ญ~์ˆ˜๋ฐฑ ๊ฐœ) ๋นŒ๋“œํ•  ๋•Œ
์˜ˆ์‹œ ๋ช…๋ น gcc main.c -o main make (→ ๋‚ด๋ถ€์ ์œผ๋กœ gcc ํ˜ธ์ถœ)

๐Ÿงฉ 3๏ธโƒฃ ์˜ˆ์‹œ๋กœ ๋น„๊ตํ•˜๊ธฐ

โœ… (1) gcc๋กœ ์ง์ ‘ ๋นŒ๋“œ

 
$ gcc main.c util.c calc.c -o myapp

โžก๏ธ ์ง์ ‘ gcc๋กœ ๋ชจ๋“  ์†Œ์ŠคํŒŒ์ผ์„ ํ•œ ๋ฒˆ์— ๋ช…์‹œํ•ด์•ผ ํ•จ.
โžก๏ธ ํŒŒ์ผ์ด ์ˆ˜์ •๋  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•ด์•ผ ํ•จ.


โœ… (2) make๋ฅผ ์ด์šฉํ•œ ์ž๋™ ๋นŒ๋“œ

๐Ÿงพ Makefile ์˜ˆ์‹œ

 
TARGET = myapp OBJS = main.o util.o calc.o CC = gcc CFLAGS = -Wall $(TARGET): $(OBJS) $(CC) -o $(TARGET) $(OBJS) clean: rm -f $(TARGET) $(OBJS)

์ดํ›„ ๋‹จ์ˆœํžˆ:

 
$ make

โžก๏ธ make๋Š” ํŒŒ์ผ์˜ ์ˆ˜์ • ์‹œ๊ฐ„(time stamp) ์„ ๋น„๊ตํ•ด์„œ
์ˆ˜์ •๋œ .c ํŒŒ์ผ๋งŒ ๋‹ค์‹œ gcc๋กœ ์ปดํŒŒ์ผํ•จ.


๐Ÿš€ 4๏ธโƒฃ ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ

๋น„์œ ์„ค๋ช…
๐Ÿ”ง gcc “๋ง์น˜” — ์ง์ ‘ ์ฝ”๋“œ ํ•˜๋‚˜ํ•˜๋‚˜ ์ปดํŒŒ์ผํ•˜๋Š” ๋„๊ตฌ
๐Ÿ—๏ธ make “ํ˜„์žฅ ๊ฐ๋…” — ์–ด๋–ค ํŒŒ์ผ์„ ๋จผ์ €, ์–ด๋–ค ์ˆœ์„œ๋กœ, ์–ด๋–ค ์˜ต์…˜์œผ๋กœ ์ปดํŒŒ์ผํ• ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ์ž๋™์œผ๋กœ gcc ํ˜ธ์ถœ

๐Ÿง  5๏ธโƒฃ make์˜ ๋‚ด๋ถ€ ๋™์ž‘

1๏ธโƒฃ Makefile์„ ์ฝ๋Š”๋‹ค.
2๏ธโƒฃ ํƒ€๊ฒŸ(target) ํŒŒ์ผ๊ณผ ๊ทธ์— ํ•„์š”ํ•œ ์†Œ์ŠคํŒŒ์ผ์˜ ์˜์กด ๊ด€๊ณ„(dependency) ๋ฅผ ํ™•์ธํ•œ๋‹ค.
3๏ธโƒฃ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ํŒŒ์ผ๋งŒ gcc๋กœ ์žฌ์ปดํŒŒ์ผํ•œ๋‹ค.
4๏ธโƒฃ ๋งํฌ ํ›„ ์‹คํ–‰ํŒŒ์ผ(a.out, app, ๋“ฑ)์„ ์ƒ์„ฑํ•œ๋‹ค.


๐Ÿ“š 6๏ธโƒฃ ์ •๋ฆฌ ์š”์•ฝ

ํ•ญ๋ชฉgccmake
๋ชฉ์  C/C++ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ปดํŒŒ์ผ ์ปดํŒŒ์ผ ์ž๋™ํ™” ๋ฐ ๊ด€๋ฆฌ
์ž…๋ ฅ .c, .cpp ํŒŒ์ผ Makefile
์ฃผ ์‚ฌ์šฉ ๋Œ€์ƒ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ
์žฌ์ปดํŒŒ์ผ ๋งค๋ฒˆ ์ „์ฒด ์žฌ์ปดํŒŒ์ผ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ž๋™ ์žฌ์ปดํŒŒ์ผ
์˜ˆ์‹œ gcc main.c -o main make (Makefile ์ด์šฉ)

๐Ÿ’ฌ [์ถ”๊ฐ€๋œ ๋‚ด์šฉ]

  • make๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ gcc ์™ธ์—๋„ clang, g++ ๋“ฑ ๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์—์„œ๋Š” CMake, Autotools, Meson, Ninja ๋“ฑ
    ๋” ๋ฐœ์ „๋œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด make์˜ ์›๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

โœ… ์ •๋ฆฌ ๋ฌธ์žฅ

๐Ÿ”น gcc๋Š” “์ปดํŒŒ์ผ๋Ÿฌ”์ด๊ณ ,
๐Ÿ”น make๋Š” “์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ž๋™ํ™” ์‹œ์Šคํ…œ”์ด๋‹ค.

gcc๋Š” ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋„๊ตฌ,
make๋Š” “๋ˆ„๊ฐ€, ์–ธ์ œ, ์–ด๋–ค ํŒŒ์ผ์„, ์–ด๋–ค ์˜ต์…˜์œผ๋กœ” ๋นŒ๋“œํ• ์ง€๋ฅผ ๋Œ€์‹  ๊ฒฐ์ •ํ•ด์ค€๋‹ค.


 

 

 


๐Ÿงฉ ์˜ˆ์ œ 1-3. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ — perror()

 
01 #include <stdio.h>
02 #include <unistd.h>
03 #include <fcntl.h>

05 int main() {
06     int fd;
07     fd = open("none.txt", O_RDONLY);
08     if (fd == -1) {
09         perror("Error");
10     }
}

๐Ÿง  ์‹คํ–‰ ๊ฒฐ๊ณผ

Error: No such file or directory
 

[์ถ”๊ฐ€๋œ ๋‚ด์šฉ]

  • perror()๋Š” errno ๊ฐ’์„ ์ž๋™์œผ๋กœ ํ•ด์„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.
  • strerror(errno) ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์ง์ ‘ ๋ฐ˜ํ™˜๋ฐ›์„ ์ˆ˜๋„ ์žˆ๋‹ค.

๐Ÿ’พ ์˜ˆ์ œ 1-4. ๋ฉ”๋ชจ๋ฆฌ ๋™์  ํ• ๋‹น — malloc()

 
01 #include <stdio.h>
02 #include <stdlib.h>

04 int main() {
05     int *p;
06     p = (int *)malloc(sizeof(int) * 3);
07     if (p == NULL) {
08         perror("malloc");
09         exit(1);
10     }
11     printf("Memory allocated successfully.\n");
12     free(p);
}

๐Ÿ“˜ ์„ค๋ช…

  • malloc()์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๊ณ  ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜.
  • ์‹คํŒจ ์‹œ NULL ๋ฐ˜ํ™˜ ๋ฐ errno ์„ค์ •.
  • ๋ฐ˜๋“œ์‹œ free()๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์•ผ ํ•จ.

โš™๏ธ ์˜ˆ์ œ 1-5. make ๋„๊ตฌ ์‚ฌ์šฉ

๋ฆฌ๋ˆ…์Šค์—์„œ make๋Š” ๋‹ค์ˆ˜์˜ C ์†Œ์Šค์ฝ”๋“œ ์ปดํŒŒ์ผ์„ ์ž๋™ํ™”ํ•œ๋‹ค.

๐Ÿงฉ Makefile ์˜ˆ์‹œ

 
TARGET = main
OBJS = main.o util.o
CC = gcc
CFLAGS = -Wall

$(TARGET) : $(OBJS)
	$(CC) -o $(TARGET) $(OBJS)

clean :
	rm -f $(TARGET) $(OBJS)
 

๐Ÿง  ์‹คํ–‰ ์ˆœ์„œ
1๏ธโƒฃ make → ์ž๋™์œผ๋กœ ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ์ปดํŒŒ์ผ
2๏ธโƒฃ make clean → ์ƒ์„ฑ๋œ ํŒŒ์ผ ์‚ญ์ œ

[์ถ”๊ฐ€๋œ ๋‚ด์šฉ]

  • make๋Š” ํŒŒ์ผ ์ˆ˜์ • ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์žฌ์ปดํŒŒ์ผ ํ•˜๋ฏ€๋กœ ํšจ์œจ์ ์ด๋‹ค.

๐Ÿงฉ ์˜ˆ์ œ 1-6. ๋ช…๋ นํ–‰ ์ธ์ž — argc, argv[]

 
01 #include <stdio.h>

03 int main(int argc, char *argv[]) {
04     int i;
05     for (i = 0; i < argc; i++)
06         printf("argv[%d] = %s\n", i, argv[i]);
}

๐Ÿง  ์‹คํ–‰ ๊ฒฐ๊ณผ

$ ./a.out test 123
argv[0] = ./a.out
argv[1] = test
argv[2] = 123

[์ถ”๊ฐ€๋œ ๋‚ด์šฉ]

  • argc ๋Š” ์ธ์ž ๊ฐœ์ˆ˜, argv[] ๋Š” ์ธ์ž ๋ฌธ์ž์—ด ๋ฐฐ์—ด.
  • ํ”„๋กœ๊ทธ๋žจ ๋™์ž‘์„ ๋™์ ์œผ๋กœ ์ œ์–ดํ•  ๋•Œ ํ•„์ˆ˜.

๐Ÿงฉ ์˜ˆ์ œ 1-7. ์˜ต์…˜ ์ฒ˜๋ฆฌ — getopt()

 
01 #include <stdio.h>
02 #include <unistd.h>

04 int main(int argc, char *argv[]) {
05     int n;
06     extern char *optarg;
07     extern int optind;

09     printf("Current Optind : %d\n", optind);
10     while ((n = getopt(argc, argv, "abc:")) != -1) {
11         switch (n) {
12             case 'a':
13                 printf("Option : a\n");
14                 break;
15             case 'b':
16                 printf("Option : b\n");
17                 break;
18             case 'c':
19                 printf("Option : c, Argument=%s\n", optarg);
20                 break;
21         }
22         printf("Next Optind : %d\n", optind);
23     }
}

๐Ÿ“˜ ์„ค๋ช…

  • getopt() ํ•จ์ˆ˜๋Š” ์˜ต์…˜(-a, -b, -c)์„ ์ˆœ์„œ๋Œ€๋กœ ํŒŒ์‹ฑํ•œ๋‹ค.
  • optarg ๋Š” ์˜ต์…˜์— ๋ถ€์†๋œ ์ธ์ž(-c argument)๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • optind ๋Š” ๋‹ค์Œ ์ธ์ž์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

๐Ÿง  ์‹คํ–‰ ์˜ˆ์‹œ

$ ./a.out -a -c hello
Option : a
Option : c, Argument=hello
 

[์ถ”๊ฐ€๋œ ๋‚ด์šฉ]

  • ์ž˜๋ชป๋œ ์˜ต์…˜ ์ž…๋ ฅ ์‹œ “invalid option” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ.
  • ์‹ค๋ฌด์—์„œ ์ปค๋งจ๋“œ๋ผ์ธ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์‹œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋จ.

๐Ÿงพ ์ •๋ฆฌ

๊ตฌ๋ถ„ํ•ต์‹ฌ ๊ฐœ๋…
์‹œ์Šคํ…œ ํ˜ธ์ถœ ์šด์˜์ฒด์ œ ์„œ๋น„์Šค ์ ‘๊ทผ (์ปค๋„)
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๊ฐ์‹ผ ์ธํ„ฐํŽ˜์ด์Šค
์—๋Ÿฌ ์ฒ˜๋ฆฌ errno, perror(), strerror()
๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น malloc(), free()
์˜ต์…˜ ์ฒ˜๋ฆฌ getopt()
๋นŒ๋“œ ๋„๊ตฌ make, gcc
ํ‘œ์ค€ ๋ฌธ์„œ POSIX, ANSI C, SVID, SUS

๐Ÿ“š [์ถ”๊ฐ€ ์š”์•ฝ]

  • ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ปค๋„๊ณผ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ๊ณ„์—์„œ ๋™์ž‘ํ•œ๋‹ค.
  • POSIX ํ˜ธํ™˜์„ฑ ํ™•๋ณด๋Š” ์ด์‹์„ฑ์˜ ํ•ต์‹ฌ์ด๋‹ค.
  • man ๋ช…๋ น, errno, perror, getopt๋Š” ๋ชจ๋“  ๋ฆฌ๋ˆ…์Šค ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ธฐ๋ณธ๊ธฐ๋‹ค.