Minishell (42 cursus)
Minishell
42 ์์ธ์ ๊ณผ์ ์ค ํ๋์ธ Minishell์ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๊ธ.
๋ชฉํ๋ zsh์ ๊ฐ์ ๊ฐ๋จํ ์์ ๋ง๋๋ ๊ฒ.
file descriptor์ ๋ํ ์ง์์ ๋ง์ด ๋ฐฐ์ฐ๊ฒ ๋๋ค.
Readline Library
minishell ๊ณผ์ ์์๋ readline ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ์ ํ๊ฐํ๋ค.
readline
char *readline(const char *);์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ฐํํ๋ค.
EOF๋ฅผ ๋ง๋๋ฉด NULL์ ๋ฐํํ๋ค.
add_history
int add_history(const char *);param์ผ๋ก ๋ค์ด์จ ๋ฌธ์์ด์ history๋ก ์ ์ฅํ๋ค.
ํ๋กฌํํธ๊ฐ ์ด๋ฆฐ ์ํ์์ ํค๋ณด๋ ๋ฐฉํฅํค ์ ์๋๋ฅผ ํตํด ์ด์ ๊ป ํ๋กฌํํธ์ ์ ๋ ฅํ ๋ฌธ์์ด์ ๋ถ๋ฌ์ฌ ์ ์๋ค.
Example
์คํ์ฒ๋ผ ๊ฐ์ฅ ๋ง์ง๋ง ๋ฌธ์์ด๋ถํฐ ๋ถ๋ฌ์ค๋ ๋ฐฉ์.
rl_on_new_line
๋ผ์ธ์ ์ถ๋ ฅํ ํ ์ ๋ผ์ธ(๋น ๋ผ์ธ)์ผ๋ก ์ด๋ํ๋ค๊ณ ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ์ ์๋ฆฐ๋ค.
๊ฐํ๋ฌธ์ ์ถ๋ ฅ ์ดํ์ ์ด์ฉ๋๋ฉฐ, ์ ์ ์ํ์ 0, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ -1์ ๋ฐํํ๋ค.
rl_replace_line
rl_line_buffer์ ๋ด์ฉ์ text๋ผ๋ ๋ฌธ์์ด๋ก ๋ฐ๊พผ๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํฌ์ธํธ์ ๋งํฌ๊ฐ ์ ์ง๋๋ค.
clear_undo๋ ๋ด๋ถ์ ์ผ๋ก ์ ์ง์ค์ธ undo_list๋ฅผ ์ด๊ธฐํํ ์ง์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
0์ด๋ฉด ์ด๊ธฐํํ์ง ์๊ณ , ์ด์ธ์ ๊ฐ์ด๋ผ๋ฉด ์ด๊ธฐํํ๋ค.
rl_redisplay
ํ์ฌ rl_line_buffer์ ์ปจํ ์ธ ๋ฅผ ๋ฐ์ํ์ฌ ํ์ฌ ํ๋ฉด์ ํ์๋๋ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ค.
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ์ง ์ ์ง์ค์ธ rl_line_buffer์ ๊ฐ์ ํ๋กฌํํธ์ ํจ๊ป ์ถ๋ ฅํ๋ค.
์ด ๋ ํ๋กฌํํธ ๊ฐ์ readline ํจ์์ ํ๋กฌํํธ๋ก ์ค ๋ฌธ์์ด๋ก ์ด๋ํ๋ค.
์๊ทธ๋์ ๋ฐ์์ ๋์ ์ํฉ์์ rl_redisplay๋ฅผ ์ด์ฉํ๊ฒ ๋๋ค.
Simple example readline library
wait
์์ process๊ฐ ์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ๊ฒฝ์ฐ pid, ์คํจํ ๊ฒฝ์ฐ -1์ ๋ฐํํ๋ค.
statloc์ ์ฃผ์๋ฅผ ์ธ์๋ก ๋ฃ์ด ์์ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ฐ์ ์ ์๋ค.
๊ธฐํ ํ์ฉ ํจ์
printf, malloc, free, write, open, read, close, fork, wait, waitpid, wait3, wait4, signal, kill, exit, getcwd, chdir, stat, lstat, fstat, unlink, execve, dup, dup2, pipe, opendir, readdir, closedir, strerror, errno, isatty, ttyname, ttyslot, ioctl, getenv, tcsetattr, tcgetattr, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs
waitpid
wait๊ณผ ๊ฐ์ง๋ง ์ต์ ๊ณผ pid๋ฅผ ์ง์ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋๋ก ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
wait3
์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ ๊ฒ์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ, ์ข ๋ฃ๋ ํ๋ก์ธ์ค์ ์ํ์ ์์ ์ฌ์ฉ๋์ ์๋ ค์ฃผ๋ ํจ์.
wait4
rusage
child process์ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด๋ค.
signal
ํน์ ์๊ทธ๋์ ๋ํด ์ํํ ๋์์ ์ ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
์๊ทธ๋ ํจ์๋ฅผ ํตํด SIGKILL, SIGSTOP, SIGCONT ๋ฑ์ ์ ์ธํ ํน์ ์๊ทธ๋์ ์ฒ๋ฆฌ ๋์์ ์ ์ํ ์ ์๋ค.
์๊ทธ๋ ํ์ ์ ๋ง๋ ํธ๋ค๋ฌ๋ฅผ ์ค์นํ๊ณ ์ฑ๊ณต ์ ์ด์ ํธ๋ค๋ฌ๋ฅผ ๋ฐํํ๊ณ ์คํจ์ SIG_ERR์ ๋ฐํํ๋ค.
Example
unlink
ํ๋๋งํฌ๋ฅผ ๋๋๋ฐ ์ด์ฉํ๋ค. ํ๋๋งํฌ์ ์ด๋ฆ์ ์ญ์ ํ๋ฉด inode๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ํ๋์ ํ๋๋งํฌ๋ฅผ ๋์ด ๋งํฌ์ ๊ฐ์๋ฅผ ํ๋ ์ค์ธ๋ค.
path์ ๋ช
์๋ ํ๋๋งํฌ๋ ์ญ์ ๊ฐ ๋์ง๋ง ํด๋น inode๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๋ชจ๋ ํ๋ ๋งํฌ๊ฐ ์ง์์ง๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ๊ทธ ํ์ผ์ ํ๋๋งํฌ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ์ฌ์ ํ ๊ทธ ํ์ผ์ ์กด์ฌํ๊ฒ ๋๋ค.
์ ์์ ์ผ๋ก ํ๋๋งํฌ๋ฅผ ๋์ผ๋ฉด 0, ๊ทธ๋ ์ง ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.
ํ๋๋งํฌ์ ์ฐธ์กฐ ๊ฐ์๊ฐ 0์ด ๋๋ฉด ์ค์ ํ์ผ์ ๋ด์ฉ์ด ์ ์ฅ๋์ด ์๋ disk space๋ฅผ freeํ์ฌ OS๊ฐ ๋ค๋ฅธ ํ์ผ์ ์ํด์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
execve
์ธ์๋ก ๋ฐ์ ํ์ผ์ ๋ํด์ ์คํํ๊ณ ์ ์ ๋์ํ ๊ฒฝ์ฐ 0, ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ -1์ ๋ฐํํ๋ค.
dup
fd๋ฅผ ๋ฐ์์ ๋ณต์ ํ๋ค. ์ ์์ ์ผ๋ก ๋ณต์ ํ ๊ฒฝ์ฐ fd๊ฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ -1 ๋ฐํ.
dup2
dup2์ dup์ ๋์ํ๋ ๋ฐฉ์์ด ๋์ผํ๋ค. ๋ค๋ง ๋ฐํ๊ฐ์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ fd2๋ผ๋ ๊ฐ์ด ๋์ฌ ์ ์๋๋ก fd๋ผ๋ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ฅผ ์ํํ๋ค.
์ ์ ๋์์ ๊ฒฝ์ฐ fd2๊ฐ fd๊ฐ ๊ฐ๋ฆฌํค๋ file descriptor๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค. ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ -1 ๋ฐํ.
pipe
์๋ก ๋ ๋ฆฝ๋ ํ๋ก์ธ์ค๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํ๋ค.
ํ๋์ ํ์ดํ ๋ฐ ํ์ดํ์ ๋ํ ๋ ๊ฐ์ fd๊ฐ ์์ฑ๋๋ฉฐ, ํ๋์ ํ์ดํ๋ฅผ ํ๋ก์ธ์ค๋ผ๋ฆฌ ๊ณต์ ํ๋ค.
ํ์ดํ ์์ฒด๋ fork()๋ฅผ ํ๋๋ผ๋ ๋ณต์ฌ๋์ง ์์ผ๋ฉฐ, ๋ฐฉํฅ์ฑ์ด ์๋ค.
fd[2]
ํฌ๊ธฐ๊ฐ 2์ธ intํ ๋ฐฐ์ด. fd[0]์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ์ ์๋ fd๊ฐ ๋ด๊ธด๋ค. fd[1]์๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ์ ์๋ fd๊ฐ ๋ด๊ธด๋ค.
fd[0] = read, fd[1] = write
opendir
์ง์ ํ ๋๋ ํ ๋ฆฌ ์คํธ๋ฆผ์ ์ฐ๋ค.
ํน์ ๋๋ ํ ๋ฆฌ ์์ ์๋ ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด ์ฌ์ฉ.
์ ์์ ์ผ๋ก ๋ฆฌํด๋ DIR ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ readdir()๊ณผ closedir()์ ์ฌ์ฉ.
๋๋ ํ ๋ฆฌ ์ด๊ธฐ์ ์ฑ๊ณตํ๋ฉด ๋๋ ํ ๋ฆฌ ์ ๋ณด ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ๋ฐํํ๊ณ ์คํจํ๋ฉด NULL์ ๋ฐํ.
readdir
opendir()๋ก ์ป์ ๋๋ ํ ๋ฆฌ ํฌ์ธํฐ๋ฅผ ํตํด์ ์ ๋ณด๋ฅผ ์ฐจ๋ก๋๋ก ์ฝ๋๋ค.
์ฐ์๋ readdir()์ ํธ์ถํ ๋๋ ๊ทธ ๋ฆฌํด ํฌ์ธํฐ๋ฅผ ๋ฐ๋์ ํ์ธํด์ผ ํ๋ค.
closedir
DIR ํฌ์ธํฐ๋ฅผ ํตํด ๋๋ ํ ๋ฆฌ ์คํธ๋ฆผ์ ๋ซ๋๋ค.
์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ๊ฒฝ์ฐ 0์ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ -1์ ๋ฐํ.
strerror
์ค๋ฅ ๋ฉ์์ง ๋ฌธ์์ด์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ์ป๋๋ค.
errnum ๊ฐ์ ํตํด ๋ฐ์ํ๋ ์ค๋ฅ์ ๋ง๋ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค.
์ถ๋ ฅ๋๋ ์ค๋ฅ ๋ฉ์์ง์ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๋ ํ๋ซํผ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
errno
์๋ฌ ๋ฐ์์ ๊ฐ์ ๋ฐ๊พธ์ด ํด๋น ์๋ฌ ๋ฉ์์ง๋ฅผ ๊ฐ์ง๋ค.
isatty
ํ์ผ ์ง์ ์๊ฐ ํฐ๋ฏธ๋์ ์ฌ์ฉํ๋์ง ๊ฒ์ฌํ๋ค.
ํฐ๋ฏธ๋์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด 1, ๊ทธ๋ ์ง ์์ผ๋ฉด 0์ ๋ฐํํ๋ค.
ttyname
ํฐ๋ฏธ๋ ์ด๋ฆ์ ๋ฐํํ๋ค.
desc๊ฐ ํฐ๋ฏธ๋์ ์ฐธ์กฐํ๊ณ ์๋ค๋ฉด ํด๋น ํฐ๋ฏธ๋์ ๊ฒฝ๋ก๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํํ๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ NULL์ ๋ฐํํ๋ค.
static ํํ๋ก ํ ๋น๋์ด ์์ด ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ๋ณ๋์ free()๊ฐ ํ์์๋ค.
ttyslot
ํฐ๋ฏธ๋์ ๋ํ DB์ entry index๋ฅผ ๋ฐํํ๋ค.
๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒฝ์ฐ ์ด์ฉํ๊ณ ์๋ ์์คํ ์ ๋ฐ๋ผ 0 ๋๋ -1์ด ๋ฐํ๋๋ค.
ioctl
์ ํ์ ์ธ ์ด์์ฒด์ ๋ 2๊ณ์ธต์ผ๋ก ๋๋๋ค. User Space(์ฌ์ฉ์ ๋ชจ๋)์ Kernel Space(์ปค๋ ๋ชจ๋).
User Space์ ์์ฃผํ๋ Application์ด Kernel Space์ ์กด์ฌํ๋ ์์์ ์ฌ์ฉํ๊ณ ์ ํ ๋ ์์คํ ์ฝ์ ์ด์ฉํ๋ค.
System Call Function์ ๋ด๋ถ์ ์ผ๋ก System Call Vector์ ๋์๋๋ค. ์๋ฅผ ๋ค๋ฉด,
exit()ํจ์๋ System Call Vector Number : 1,write()ํจ์๋ System Call Vector Number 4 ์ ๊ฐ๋ค.
์ ํ์ ์ธ ์ด์์ฒด์ ์ ์ปค๋์ ์ ๋ฐฑ๊ฐ์ System Call Vector๋ฅผ ์ ๊ณตํ๋ค.
ioctl() ์์คํ
์ฝ์ device driver์ ํต์ ํ๊ธฐ ์ํ ํจ์์ด๋ค.
What is
device driver? ํ๋์จ์ด ์ฃผ๋ณ ์ฅ์น๋ ์ปค๋ ์์ ์ง์ ์ ์ผ๋ก ์ฃผ์ ์ง์ ์ ํ ์ ์๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ฅ์น์ ํต์ ํ๊ธธ ์ํ ์ ์๋ค. (ํ๋์จ์ด ์ฅ์น์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ถ์ ๋) ๊ทธ๋ฐ๋ฐ ์ปค๋ ๊ฐ๋ฐ์๋ ์ด๋ค ์ฅ์น๊ฐ ์ปค๋ ์์ ์ฃผ์๋ฅผ ํ ๋น๋ฐ์์ง, ๊ทธ ์ฅ์น์๋ ์ด๋ค ๊ธฐ๋ฅ์ด ์๋์ง ์ ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ํ์ฅ๊ฐ๋ฅํ ๋ชจ๋์์ผ๋ก ์ปค๋์ ์ ์ฐํ๊ฒ ์ค๊ณํ ํ์๊ฐ ์์๊ณ , ๊ทธ๋ ๊ฒ ํด์ ๋์จ๊ฒ device driver์ด๋ค. ์ฆ, ์ด๋ ํ ์ฅ์น๊ฐ ์ฐ๊ฒฐ๋ ์ง ๋ชจ๋ฅด๋ ์ํฉ์์ device driver๋ผ๋ ํ๋์ ์ค๊ฐ ๊ณ์ธต์ ๋ ์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
ioctl()ํจ์๋ ์ฅ์น์๊ฒ ์์ฒญ์ ๋ณด๋ผ ๋ ์ฌ์ฉ๋๋ ํจ์์ด๋ฉฐ, ์์คํ
์ฝ์ด๋ค.
int fd๋ ์ฅ์น๋ฅผ ์ฐธ์กฐํ๋ fd๋ก์จ, open์ ํตํด ์ป๋ fd๊ฐ ๋๋ค. (O_NONBLOCK flag ์ด์ฉ ๊ถ์ฅ)
unsigned long request๋ fd์ ํด๋นํ๋ ์ฅ์น์๊ฒ ๋ณด๋ผ ๋ช
๋ น์ด๋ค. ์ด ๋ช
๋ น์ ๋ฐ๋ผ์ ๋๋ฐ์ด์ค๋ฅผ ์ปจํธ๋กค ํ ์ ์๋ค.
์ฌ์ฉ์ ์ ์ํ์ ์ด์ฉ๋๋ ๊ฒฝ์ฐ์๋ ioctl ํจ์์ ๋ฐํ๊ฐ์ ์ด์ฉํ ์๋ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ํจ์ ํธ์ถ ์ ๋ง์ง๋ง ์ธ์์๋ char *ํ์
์ ์ด์ฉํ๋ค.
์ ์ ์๋์ 0, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ -1์ ๋ฐํํ๋ค.
getenv
name์ ํด๋นํ๋ ํ๊ฒฝ ๋ณ์์ ๊ฐ์ ๋ํ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
ํ๊ฒฝ ๋ณ์์ ํด๋นํ๋ ๊ฐ์ ์ฐพ์ง ๋ชปํ๊ฑฐ๋ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๊ฒฝ์ฐ NULL์ ๋ฐํํ๋ค.
tcsetattr
file descriptor๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค.
ํจ์ ์ํ์ ์ฑ๊ณตํ๋ฉด 0, ๊ทธ๋ ์ง ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.
tcgetattr
๊ธฐ๋กํ termios ๊ตฌ์กฐ์ฒด๋ฅผ ํฌ์ธํฐ ํ์ ์ผ๋ก ํ ๋นํ๋ค. ํจ์ ์ํ์ ์ฑ๊ณตํ๋ฉด 0, ๊ทธ๋ ์ง ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.
tgetent
TermCap์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ์ ์๋๋ก ๋ง๋๋ ๋ฃจํด์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก name์ ํ ๋นํ๋ ๊ฐ์ TERM ํ๊ฒฝ๋ณ์๋ก ํ ๋น๋ ํฐ๋ฏธ๋ ํ์
์ ์ด์ฉํ๋ค.
ํจ์ ์ํ์ ์ฑ๊ณตํ๋ฉด 1, DB๊ฐ ๋ฐ๊ฒฌ๋์์ง๋ง TERM์ ์ํ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ 0, ๊ทธ ์ธ์๋ -1์ ๋ฐํ.
What is
TermCap?Termcap์ Unix ๊ณ์ด ์ปดํจํฐ์์ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค. minishell์์ ๋ฐ๋์ ํ ๋ฒ์ฏค์ ๊ณต๋ถํ๊ณ ๋์ด๊ฐ์ผ ํ๋ ๊ฐ๋ !
tgetflag
์ฟผ๋ฆฌ๋ก ์ฌ์ฉํ ์ด๋ฆ์ ์ธ์๋ก ๋ฐ๋๋ค. ํ๋๊ทธ๋ฅผ ์ป์ ์ ์๋ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ 1, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ 0์ ๋ฐํํ๋ค.
tgetnum
์ฟผ๋ฆฌ๋ก ์ฌ์ฉํ ์ด๋ฆ์ ์ธ์๋ก ๋ฐ๋๋ค.
ํจ์ ์ํ์ ์ฑ๊ณตํ๋ฉด ๊ทธ ๊ฐ์ ๋ฐํํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.
tgetstr
์ฟผ๋ฆฌ๋ก ์ฌ์ฉํ ์ด๋ฆ์ ์ธ์๋ก ๋ฐ๋๋ค.
์ฟผ๋ฆฌ์ ํด๋นํ๋ Escape Sequence๋ฅผ ์ป์ ์ ์๋ค๋ฉด ๊ทธ ๊ฐ์ ๋ฐํํ๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ NULL์ ๋ฐํํ๋ค.
tgoto
๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ๋ ๊ธฐ๋ฅ์ผ๋ก ์ธ์คํด์คํํ๋ค. ์ถ๋ ฅ์ tputs๋ก ์ ๋ฌ๋๋ค.
col๊ณผ row๋ฅผ ๊ณ ๋ คํ Cursor Motion์ Escape Sequence๋ฅผ ๋ฐํํ๋ค. ํจ์ ์ํ์ ์คํจํ๋ฉด NULL์ ๋ฐํํ๋ค.
tputs
Escape Sequence์ ๋ํ ํฐ๋ฏธ๋ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ ๋ฃจํด์ด๋ค.
tgetstr ๋๋ tgoto๋ฅผ ํตํด ์ป์ ๊ฐ์ str์ธ์๋ก ๋ฐ๋๋ค.
affcnt์ ๊ฒฝ์ฐ ์ํฅ์ ๋ผ์น ์ค์ ์๋ฅผ ๋ํ๋๋๋ฐ, 1๋ก ์ฃผ๋ ๊ฒ์ด ์ผ๋ฐ์ .
putc๋ ASCII ๋ฌธ์ ๊ฐ์ ์ธ์๋ก ๋ฐ์ ํ์ค ์ถ๋ ฅ์ ์ฐ๊ธฐ ์์
์ผ๋ก ํฐ๋ฏธ๋์ ASCII ๋ฌธ์ ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ ํจ์.
getcwd
ํ์ฌ ์์ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ๋ฌธ์์ด๋ก ๊ฐ์ ธ์จ๋ค.
๊ฒฝ๋ก๊ฐ ์ ์ฅ๋๋ buf๋ฅผ ์ธ์๋ก ๋ฐ๊ณ , buf๋ NULL๋ฌธ์๋ฅผ ํฌํจํ๋ฉฐ ๊ธฐ๋ก์ด ์ฑ๊ณต์ ์ด๋ฉด buf์ ์ฃผ์๋ฅผ ๋ฐํํ๋ค.
buf์ NULL์ ์ธ์๋ก ํ ๊ฒฝ์ฐ size๋งํผ์ ํฌ๊ธฐ๋ก malloc ํ ํด๋น ๊ณต๊ฐ์ ์ฃผ์๋ฅผ ๋ฐํํ๋ค.
์ด ๊ฒฝ์ฐ ๋์ ํ ๋น ๋ฐ์ ๊ณต๊ฐ์ ๋ํด์ ์ฌ์ฉ์๊ฐ ์ง์ free๋ฅผ ํธ์ถํด์ผ ํ๋ค.
๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ NULL์ด ๋ฐํ๋๋ฉฐ errno์ ์์ธ ์ค๋ฅ ๋ด์ฉ์ด ์ ์ฅ๋๋ค.
chdir
ํ์ฌ ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ๋ค.
stat
ํ์ผ์ ํฌ๊ธฐ, ํ์ผ์ ๊ถํ, ํ์ผ์ ์์ฑ์ผ์, ํ์ผ์ ์ต์ข ๋ณ๊ฒฝ์ผ ๋ฑ, ํ์ผ์ ์ํ๋ ํ์ผ์ ์ ๋ณด๋ฅผ ์ป๋ ํจ์.
ํ ๋ง๋๋ก ํ์ผ์ ์ํ๋ฅผ ๊ฐ์ ธ์จ๋ค. ์ ๋ ๊ฒฝ๋ก path๋ฅผ ์ธ์๋ก ๋ฐ์ผ๋ฉฐ, path๊ฐ ๊ฐ๋ฆฌํค๋ ํ์ผ์ ํต๊ณํ๊ณ buf๋ฅผ ์ฑ์ด๋ค.
ํจ์ ์คํ ์ฑ๊ณต ์ 0, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ -1 ๋ฐํ.
Example
lstat
ํ์ผ ์ํ(์ ๋ณด)๋ฅผ ๊ฐ์ ธ์จ๋ค. ์ ๋ ๊ฒฝ๋ก path๋ฅผ ์ธ์๋ก ๋๊ฒจ์ฃผ๋ฉฐ, ๊ฒฝ๋ก๊ฐ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ธ ๊ฒฝ์ฐ ๋งํฌ๊ฐ ์ฐธ์กฐํ๋ ํ์ผ์ด ์๋ ๋งํฌ ํ์ผ์ ๋ํ ์ ๋ณด๋ก buf๋ฅผ ์ฑ์ด๋ค.
ํจ์ ์คํ ์ฑ๊ณต ์ 0, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ -1์ ๋ฐํ.
fstat
ํ์ผ ์ํ(์ ๋ณด)๋ฅผ ๊ฐ์ ธ์จ๋ค. fd๊ฐ ๊ฐ๋ฆฌํค๋ ํ์ผ์ ํต๊ณํ๊ณ buf๋ฅผ ์ฑ์ด๋ค.
ํจ์ ์คํ ์ฑ๊ณต ์ 0, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ -1์ ๋ฐํ.
Last updated