pipex - KimTaebin-ai/study_posts GitHub Wiki
์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ์ฌ ๊ทธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ์์๋ฅผ ๊ธฐ์ ํ์ฌ ์ปดํจํฐ์ ์ฃผ์ด์ง๋ ์ผ๋ จ์ ๋ช ๋ น๋ฌธ ์งํฉ์ฒด๋ฅผ ๋ปํ๋ค. ์กฐ๊ธ ๋ ์ ํํ ๋งํ๋ฉด, ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๋ผ ๊ทธ ์ ๋ ฅ๋ ๊ฐ์ ์ผ์ ํ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ์์์ ๋ฐ๋ผ ์ฒ๋ฆฌํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์ถํด๋ด๋ ๋ช ๋ น๋ฌธ ์งํฉ์ด๋ค.
์ถ์ฒ ๋๋ฌด์ํค
ํ๋ก๊ทธ๋จ์ด๋ผ๋ ๊ฒ์ ์ฝ๋ฉ์ผ๋ก ์์ฑํ ์์ค์ฝ๋๋ค์ ๋ฌถ์์ธ ๊ฒ์ ์๋ฏธํ๊ณ , ์ด๋ ๊ทธ๋ฅ ๋ช ๋ น์ด๋ค์ ๋ชจ์์ผ ๋ฟ์ด์ง ํ๋ก๊ทธ๋จ ์์ฒด๋ ๋ฌด์ธ๊ฐ ์ผ์ ํ๊ฑฐ๋ ํ๋ ๊ฒ์ด ์๋๋ค. (์ ์ ์ด๋ค)
์ด ํ๋ก๊ทธ๋จ์ ๋์์ํค๊ธฐ ์ํด์ ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ ์์์ ์คํ๋์ด์ผ ํ๋ค
์ปดํจํฐ์์ ์ฐ์์ ์ผ๋ก ์คํ๋๊ณ ์๋ ํ๋ก๊ทธ๋จ์ด๋ค.
์ถ์ฒ ์ํค ๋ฐฑ๊ณผ
์์์ ์ค๋ช ํ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋์ด cpu ์์์ ํ ๋น๋ฐ์ ์ฐ์์ ์ผ๋ก ์คํ๋๋ ๋์ ์ธ ์ํ๋ฅผ ์๋ฏธํ๋ค.
์ปดํจํฐ ์์คํ ์์ ํ๋ก๊ทธ๋จ์ ํผ์ ๋ ์์ ์ผ๋ก ์ํ๋ ์๋ ์๊ณ , ๊ฐ์ ๋ ๋ฆฝ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ง๋๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์๊ฒ ์ํด ์นจ๋ฒ๋นํ์ง ์๋๋ก ๋ณดํธ๋๊ณ ์๋ค.
๋ฐ๋ผ์ ํ๋ก์ธ์ค๋ ์๋ ๋ ๋ฆฝ์ ์ด์ง๋ง, ์ํฉ์ ๋ฐ๋ผ ํ๋ก์ธ์ค๋ผ๋ฆฌ ํ๋ ฅํด์ผ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ฐ ๊ฒฝ์ฐ ํ๋ก์ธ์ค๊ฐ ์์๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์ด์ผ ํ๋๋ฐ, ์๋ก๊ฐ์ ํต์ ์ ์ํด ๋ณ๋์ ๋งค์ปค๋์ฆ์ด ํ์ํ๊ณ IPC ๋ฅผ ์ด์ฉํด ํ๋ก์ธ์ค๊ฐ ํต์ ์ ํ ์ ์๋ค.
Inter Process Communication ํ๋ก์ธ์ค๊ฐ ํต์
ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ์ ๋๋ ๊ทธ์ ๋ํ ๋ฐฉ๋ฒ์ด๋ ๊ฒฝ๋ก๋ฅผ ๋ปํ๋ค.
์ถ์ฒ ์ํค ๋ฐฑ๊ณผ
์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค๋ ์๋ฏธ์ด๋ฉฐ, ๋์์ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋ค.
๋ฐ๋ผ์ ํ๋ก์ธ์ค๋ ํต์ ํ ์ ์๋ ๊ณต๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ํต์ ์ ์ํ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ฆ, ๋ณ๋์ ๊ณต๊ฐ์ด ํ์ํ๋ค.
๋ณ๋์ ๊ณต๊ฐ : ํ์ผ / ์ ํธ / ์์ผ / ๋ฉ์์ง ํ / ํ์ดํ / ์ง๋ช ํ์ดํ / ์ธ๋งํฌ์ด / ๊ณต์ ๋ฉ๋ชจ๋ฆฌ / ๋ฉ์์ง ์ ๋ฌ / ๋ฉ๋ชจ๋ฆฌ ๋งต ํ์ผ
"์ด ์ค ํ์ดํ์ ๋ํด์ ๊ตฌํํ๋ผ" ๊ฐ ํด๋น ๊ณผ์ ์ ์๊ตฌ์ฌํญ์ด๋ค. ์์๊ฒ ๋
๋ฆฌ๋ ์ค ๊ธฐ๋ฐ ์ด์์ฒด์ ๋ 'ํ์ผ ๋์คํฌ๋ฆฝํฐ' ๋ผ๋ ๊ฒ์ผ๋ก ๋ฆฌ๋ ์ค์ ๋ชจ๋ ํ์ผ์ ๊ด๋ฆฌํ๋ค.
์ฐ๋ฆฌ๊ฐ ์๋ฌด๋ฐ ์๊ฐ ์์ด ์ฌ์ฉํ๋ ๋ช ๋ น์ด๋ค์ ์ ๋ถ ํ์ผ ํํ์๋ค ์์๊ฒ ๋
๋ฐ๋ผ์ ์ค์ ๋ก ๋ฆฌ๋ ์ค ๊ธฐ๋ฐ ์ด์์ฒด์ ์ ๋ชจ๋ ํ๋ก๊ทธ๋จ๋ค์ ํ์ผ ํํ๋ก ์กด์ฌํ๊ฒ ๋๊ณ , ์ด๋ฌํ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๊ธฐ ์ํด์๋ ๊ฐ์ฅ ๋จผ์ ํ์ผ์ ์ด์ด์ผํ๋ค.
ํ๋ก๊ทธ๋จ์ ํ์ผ์ ์ด๋ฉด
์ปค๋์ด ํด๋น ํ๋ก์ธ์ค๊ฐ ๋์์ ํ๋๋ฐ ํ์ํ ์ฅ์น๋ ํ์ผ๋ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ฒํธ๋ฅผ ๋ถ์ฌ์ ๊ด๋ฆฌ
ํ๊ฒ ๋๊ณ , ์ด๋ฌํ ๋ฒํธ๋ฅผ ํ์ผ๋์คํฌ๋ฆฝํฐ(file descriptor ์ดํ fd)๋ผ๊ณ ํ๋ค. ์ด๋ฌํ fd๊ฐ์ ํ์ผ ๋์คํฌ๋ฆฝํฐ ํ
์ด๋ธ์ ์ ์ฅ๋๋ค.
์ด๋ฌํ ํ์ผ ๋์คํฌ๋ฆฝํฐ ํ ์ด๋ธ์๋ ์์ฃผ ์ฐ์ด๋ 3๊ฐ์ ์ฅ์น๊ฐ ๋ฏธ๋ฆฌ ์ ์ฅ(ํน์ ์์ฝ) ๋์ด์๋ค.
์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉํ๋ fd ๋ฒํธ 0, 1, 2 (ํ์ค ์ ๋ ฅ, ํ์ค ์ถ๋ ฅ, ํ์ฃฝ ์๋ฌ) ์ด๋ค. ๋จธ๋ฆฌ๊ฐ ๋ตํ๋ค ์์๊ฒ ๋
๋ฐ๋ผ์ ๋ฆฌ๋ ์ค์์๋ ํ๋ก๊ทธ๋จ์ ์คํํ๊ฒ ๋๋ฉด, ํ์ผ ๋์คํฌ๋ฆฝํฐ ํ ์ด๋ธ์ด ์๊ธฐ๊ฒ ๋๊ณ , 3๊ฐ์ ์คํธ๋ฆผ์ด ์๋์ผ๋ก ์ด๋ฆฐ๋ค.
์ดํ ํน์ ํ์ผ์ ์ ๊ทผ
ํ๊ณ ์ ํ๋ฉด, ์ปค๋์์๋ ํด๋น ํ๋ก์ธ์ค์๊ฒ ์ฌ์ฉํ์ง ์์ ์์๊ฐ์ fd ๋ฒํธ๋ฅผ ๋ถ์ฌ
ํ๊ณ , ์ฌ์ฉํ๊ณ ์๋ ํ์ผ์ ๋์คํฌ๋ฆฝํฐ๋ฅผ ํ
์ด๋ธ์ ํํ๋ก ๊ด๋ฆฌ
ํ๊ฒ ๋๋๋ฐ ์ด๊ฒ ๋ฐ๋ก ํ์ผ ํ
์ด๋ธ
์ด๋ค
๊ทธ ์ดํ ํ๋ก์ธ์ค๊ฐ ์ด๋ ค์๋ ํ์ผ์ ์์คํ
์ฝ
์ ์ด์ฉํด์ ์ ๊ทผํ๊ฒ ๋๋ฉด, ํ์ผ ๋์คํฌ๋ฆฝํฐ ๊ฐ์ ์ด์ฉํด์ ํ์ผ์ ์ง์นญํ ์ ์๋ค.
ํ์ผ ๋์คํฌ๋ฆฝํฐ ํ
์ด๋ธ์ ๊ฐ ํญ๋ชฉ์ fd ํ๋๊ทธ
์ ํ์ผ ํ
์ด๋ธ๋ก์ ํฌ์ธํฐ
๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด ํฌ์ธํฐ๋ฅผ ์ด์ฉํ์ฌ fd ๋ฅผ ํตํด ์์คํ
์ ํ์ผ์ ์ฐธ์กฐํ ์ ์๋ค.
ํ๋ก์ธ์ค๋ ์ด๋ฐ fd ํ ์ด๋ธ๊ณผ ํ์ผ ํ ์ด๋ธ์ ์ง์ ๊ณ ์น ์ ์๋ค.
๋ฐ๋ผ์ ๋ฐ๋์ ์ปค๋
์ ํตํด์ ์์ ํด์ผ ํ๋ค.
fd ์์ ์งง๊ฒ
cmd > file_name
cmd์์ ์ถ๋ ฅ๋๋ ๋ด์ฉ์ file_name ์ ๋ฎ์ด์ฐ๊ธฐ
๋ค๋ง ์๋์ ๊ฒฝ์ฐ์๋ ์คํ๋์ง ์๋๋ค.
(๋ฆฌ๋๋ ์ ) ์ฐ์ฐ์๋ ํ์ค ์ถ๋ ฅ์ ๋ด์ฉ์ ์ง์ ํ ํ์ผ์ ์ ์ฅํ๋ค.
ํ์ง๋ง ํด๋น ๋ช ๋ น์ด๋ ์ค๋ฅ์ด๋ฏ๋ก ์๋ฌ ๋ฉ์์ง ์ฆ, ํ์ค ์๋ฌ๋ก ์ถ๋ ฅ๋๊ณ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ค ์ถ๋ ฅ๊ณผ ํ์ค ์๋ฌ๋ ๋ณ๋๋ก ์ฒ๋ฆฌ ๋๋ฏ๋ก test2.txt์ ์ ์ฅ๋์ง ์๋๋ค
์๋ฌ ๋ฉ์์ง๋ฅผ test2.txt์ ์ ์ฅํ๋ ค๋ฉด
fd ๊ฐ์ ์์ ํ๋ฉด ์ ์ฅ์ด ๊ฐ๋ฅํ๋ค
cmd1์ ํ์ค ์ถ๋ ฅ
์ cmd2์ ํ์ค ์
๋ ฅ
์ผ๋ก ๋ฐ๋๋ค.
-
ํ์ดํ์ ์ฐ๊ฒฐ๋ ๋ ํ๋ก์ธ์ค๋ ๋์์ ์คํ๋๋ค.
-
์ผ์ชฝ ๋ช ๋ น์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ฉด, ์ด ๋ฐ์ดํฐ๊ฐ ์ฆ์ ์ค๋ฅธ์ชฝ ๋ช ๋ น์ด๋ก ์ ๋ฌ๋๋ค.
-
์ผ์ชฝ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ฉด ๋ฒํผ์ ์ ์ฅ๋๊ณ , ์ค๋ฅธ์ชฝ ํ๋ก์ธ์ค๋ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ์์ ์ฝ๋๋ค
์์คํ ํธ์ถ์ ์ด์ ์ฒด์ ์ ์ปค๋์ด ์ ๊ณตํ๋ ์๋น์ค์ ๋ํด ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฒญ์ ๋ฐ๋ผ ์ปค๋์ ์ ๊ทผํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ด๋ค.
์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ๋์คํฌ ํ์ผ์ ์ ๊ทผํ๊ฑฐ๋ ํ๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ๋ฑ์ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ, ์ฆ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ํน๊ถ ๋ช ๋ น์ ์ํ์ ํ์๋ก ํ๋ ๊ฒฝ์ฐ, ์ด์ ์ฒด์ ์๊ฒ ํน๊ถ ๋ช ๋ น์ ๋ํ์ ์์ฒญํ๋ ๊ฒ์ด ์์คํ ์ฝ์ด๋ค.
-
ํค๋:
unistd.h
-
๋งค๊ฐ๋ณ์ :
- const char *pathname : ์ฒดํฌํ๊ณ ์ ํ ๋๋ ํ ๋ฆฌ ๋๋ ํ์ผ๋ช
- int mode : ๋ง์คํฌ ๊ฐ์ ํตํด ํ์ผ ์กด์ฌ ์ฌ๋ถ ๋ฐ ๊ถํ ์ฌ๋ถ ํ์ธ
- R_OK : ํ์ผ ์กด์ฌ์ฌ๋ถ, ์ฝ๊ธฐ ๊ถํ ์ฌ๋ถ
- W_OK: ํ์ผ ์กด์ฌ์ฌ๋ถ, ์ฐ๊ธฐ ๊ถํ ์ฌ๋ถ
- X_OK : ํ์ผ ์กด์ฌ์ฌ๋ถ, ์คํ ๊ถํ์ฌ๋ถ
- F_OK : ํ์ผ ์กด์ฌ์ฌ๋ถ
-
๋ฐํ๊ฐ : ์ฑ๊ณต์ 0, ์คํจ์ -1
int main(void)
{
char *path = "./test.txt";
if (0 == access(path, F_OK))
{
write(1, "@\n", 2);
}
else
{
write(1, "$\n", 2);
}
return (0);
}
- ํค๋ : fcntl.h
- ๋งค๊ฐ๋ณ์ :
- const char *filename
- int flags
- O_RDONLY : ์ฝ๊ธฐ์ ์ฉ
- O_WRONLY : ์ฐ๊ธฐ์ ์ฉ
- O_RDWR : ์ฝ๊ณ ์ฐ๊ธฐ
- ๋ฐํ๊ฐ : ์ฑ๊ณต ์ ์์ ์ ์์ธ ํ์ผ ๋์คํฌ๋ฆฝํฐ, ์คํจ ์ -1
- ํค๋ : unistd.h
- ๋งค๊ฐ๋ณ์ :
- const char *pathname
- ๋ฐํ๊ฐ : ์ฑ๊ณต ์ 0, ์คํจ ์ -1
- ์ค๋ช : ์์คํ ํธ์ถ์ ์ฌ์ฉํ์ฌ, ํ์ผ์ ๋ํ ๋๋ ํ ๋ฆฌ ํญ๋ชฉ์ ์ง์ฐ๊ณ ๋งํฌ ๊ฐ์๋ฅผ ๊ฐ์์ํด. ์ฆ, ํ๋๋งํฌ์ ์ด๋ฆ์ ์ญ์ ํ๊ณ ํ๋๋งํฌ ์นด์ดํธ๋ฅผ 1 ๊ฐ์ํ๋ค.
- ํค๋ : unistd.h
- ๋งค๊ฐ๋ณ์ :
- int close
- ๋ฐํ๊ฐ : ์ฑ๊ณต ์ 0, ์คํจ ์ -1
- ์ค๋ช : openํจ์๋ก ์ฐ ํ์ผ์ ์ฌ์ฉ์ค์งํ๋ค.
- ํค๋ : unistd.h
- ๋งค๊ฐ๋ณ์ :
- int fd : ํ์ผ ๋์คํฌ๋ฆฝํฐ
- void *buf : ํ์ผ์ ์ฝ์ด๋๋ฆด ๋ฒํผ
- size_t nbytes : ๋ฒํผํฌ๊ธฐ
- ๋ฐํ๊ฐ : ์ฑ๊ณต ์ ์ฝ์ ๋ฐ์ดํธ ์, ์คํจ ์ -1
- ํค๋ : sys/wait.h
- ๋งค๊ฐ๋ณ์ :
- int *wstate : ์ข ๋ฃ์ํ๋ฅผ ์ ์ ์๊ณ , NULL ์ ๋ฌ ๊ฐ๋ฅ
- ๋ฐํ๊ฐ : ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ํ๋ก์ธ์ค์ PID, ์์ ํ๋ก์ธ์ค์๊ฒ 0 ๋ฐํ
https://codetravel.tistory.com/23
- ํค๋ : unistd.h
- ๋งค๊ฐ๋ณ์ :
- ๋ฐํ๊ฐ : ์ฑ๊ณต ์ ์ข ๋ฃ๋ ์์ ํ๋ก์ธ์ค id, ์คํจ ์ -1
- ์ค๋ช : forkํจ์๋ฅผ ํธ์ถํ๋ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋๊ณ , ์๋กญ๊ฒ ์์ฑ๋๋ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๊ฐ ๋จ. forkํจ์์ ์ํด ์์ฑ๋ ์์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํ์ฌ ๊ฐ์ง. forkํจ์ ์์ ๋ถํฐ, ์์ ํ๋ก์ธ์ค๋ forkํจ์์ ์๋ ์ฝ๋๊ฐ ์คํ๋๋ค ๋ณด๋ฉด ๋จ. ๋ถ๋ชจ์ ๋ฒํผ๊น์ง ๋ณต์ฌํจ
https://reakwon.tistory.com/45
- ํค๋ : sys/wait.h
- ๋งค๊ฐ๋ณ์ :
- pid_t pid : ๊ฐ์ํ ์์ ํ๋ก์ธ์ค id
- -1 : ์ฌ๋ฌ ์์ ์ค ํ๋๋ผ๋ ์ข ๋ฃ๋๋ฉด ๋ณต๊ท
- 0 : ํ์ฌ ํ๋ก์ธ์ค์ ๊ทธ๋ฃน ID์ ๊ฐ์ ๊ทธ๋ฃน์ ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ๋ณต๊ท
- ์์ : pid์ ํด๋นํ๋ ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ๋ณต๊ท
- int *status : ์์ ํ๋ก์ธ์ค์ ์ข ๋ฃ ์ํ ์ ๋ณด
- int options : ๋๊ธฐ๋ฅผ ์ํ ์ต์
- WNOHANG : ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋์๋์ง ์คํ ์ค์ธ์ง๋ง ํ์ธํ๊ณ ๋ฐ๋ก ๋ณต๊ท. ๋ถ๋ชจํ๋ก์ธ์ค๋ block๋์ง ์์
- 0 : ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง block๋จ.
- pid_t pid : ๊ฐ์ํ ์์ ํ๋ก์ธ์ค id
- ๋ฐํ๊ฐ : ์ฑ๊ณต ์ ์ข ๋ฃ๋ ์์ ํ๋ก์ธ์ค id, ์คํจ ์ -1
- ์ค๋ช : ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๋๊ธฐ.
- ํค๋ : unistd.h
- ๋งค๊ฐ๋ณ์ :
- int fd[2] : fd๊ฐ 2๊ฐ์
- ๋ฐํ๊ฐ : ์ฑ๊ณต์ ์ผ๋ก ํธ์ถ ์ 0, ์คํจ ์ -1
- ์ค๋ช : ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ํ ๋ ์ฌ์ฉํ๋ ์ปค๋ฎค๋์ผ์ด์ ์ ๋ฐฉ์. ํ๋์ ํ์ดํ ๋ฐ ํ์ดํ์ ๋ํ ๋ ๊ฐ์ ํ์ผ ๋์คํฌ๋ฆฝํฐ๊ฐ ์์ฑ ํ๋์ ํ์ดํ๋ฅผ ํ๋ก์ธ์ค๋ค์ด ๊ณต์
https://reakwon.tistory.com/80
https://nomad-programmer.tistory.com/110
- ํค๋ : unistd.h
- ๋งค๊ฐ๋ณ์ :
- int fd : fd๋ก ์ ๋ฌ๋ฐ์ ํ์ผ๋์คํฌ๋ฆฝํธ๋ฅผ ๋ณต์ ํ์ฌ ๋ฐํ
- ๋ฐํ๊ฐ : ์ฑ๊ณต ์ ํ์ผ ๋์คํฌ๋ฆฝํธ ์ค ๊ฐ์ฅ ๋ฎ์ ์ซ์, ์คํจ ์ -1
- ํค๋ : unistd.h
- ๋งค๊ฐ๋ณ์ :
- int fd : fd๋ก ์ ๋ฌ๋ฐ์ ํ์ผ๋์คํฌ๋ฆฝํธ๋ฅผ ๋ณต์ ํ์ฌ ๋ฐํ
- int fd2 : ์ ๋์คํฌ๋ฆฝํธ์ ๊ฐ์ fd2๋ก ์ง์ ํ๊ณ , ๋ง์ฝ fd2๊ฐ ์ด๋ ค์๋ค๋ฉด, ๋ซ์ ํ ๋ณต์ ๊ฐ ๋จ.
- ๋ฐํ๊ฐ : ์ฑ๊ณต ์ ์ ํ์ผ ๋์คํฌ๋ฆฝํธ, ์คํจ ์ -1
https://reakwon.tistory.com/104
- ํค๋ : unistd.h
- ๋งค๊ฐ๋ณ์ :
- const char *path : ์ ์ฒด ํ์ผ ๋ช
- const char *arg : ์ธ์ ๋ชฉ๋ก
- char * const envp[] : ํ๊ฒฝ์ค์ ๋ชฉ๋ก
- ๋ฐํ๊ฐ : ์คํจ ์ -1
- ์ค๋ช : ์ฒซ๋ฒ์งธ๋ ๋ช ๋ น์ด๋ฅผ ๋ฃ๋๋ค. ๋ค๋ง ์์ /bin/@@ํ์์ path๊ฐ ์์ด์ผ ํ๋ ๊ฒ ๊ฐ๋ค. ๋๋ฒ์งธ๋ ์ธ์๋ฅผ ๋ฃ๋๋ค. main์์ ๋์ด์จ ์ธ์ ๋ฐฐ์ด์์ ์(์คํํ์ผ)์๋ง ๋นผ๊ณ ๋ฃ์ผ๋ฉด ๋ ๊ฑฐ๊ฐ๋ค. ๋์ NULL ๋ฃ๊ธฐ ์ธ๋ฒ์งธ๋ main์์ ๋ฐ์์จ envp ๊ทธ๋๋ก
#include <unistd.h>
#include <stdio.h>
int main(int argc, char * const *argv, char **envp)
{
char *arr[] = {"ls", "-al", NULL};
int returnv = execve("/bin/ls", arr, envp);
printf("value = %d\n", returnv);
}
- ํค๋ : stdio.h
- ๋งค๊ฐ๋ณ์ :
- const char *str : ์์คํ ์ค๋ฅ ๋ฉ์ธ์ง ๋ค์์ ์ด์ด ์ถ๋ ฅํ ์ฌ์ฉ์ ์ ์ ๋ฉ์ธ์ง
- ๋ฐํ๊ฐ :
- ์ค๋ช : ์ ์ญ๋ณ์ errno์ ๊ฐ์ ํด์ํ์ฌ ์ด์ ํด๋นํ๋ ์ค๋ฅ๋ฉ์ธ์ง๋ฅผ ํ์ค ์ค๋ฅ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ถ๋ ฅํจ
- ํค๋ : cstring.h
- ๋งค๊ฐ๋ณ์ :
- int errnum : ์ค๋ฅ๋ฒํธ, ์ด ๊ฐ์ ํตํด ๋ฐ์ํ์๋ค ์ค๋ฅ์ ์๋ง๋ ์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋ฆฌํด์ํด
- ๋ฐํ๊ฐ : ์ ์ค๋ช
- ํค๋ : stdlib.h
- ๋งค๊ฐ๋ณ์ :
- int status : ์๋ฌ์ฝ๋
- ๋ฐํ๊ฐ :
- ์ค๋ช : ํ์ฌ์ cํ๋ก๊ทธ๋จ ์์ฒด๋ฅผ ์์ ์ข ๋ฃ, ๋ชจ๋ ์ด๋ ค์ง ํ์ผ ์๋์ผ๋ก ๋ซ์, ์ถ๋ ฅ๋ฒํผ ์ ๋ฐ์ดํฐ๋ ๋ชจ๋ ์ฐ๊ธฐ ์๋ฃ, ์ ์ ์ข ๋ฃ ์ exit(0), ์๋ฌ์ ๋์ฑ๋ก 1
step 1
#include "pipex.h"
int main(int argc, char *argv[])
{
t_pipe pipe;
if (argc != 5)
err_message("arguments error"); // ์ธ์๊ฐ ์๋ฌ
pipe.cmd1 = ft_split(argv[2], ' '); // ๋ช
๋ น์ด 1 (2๋ฒ์งธ ์ธ์)
pipe.cmd2 = ft_split(argv[2], ' '); // ๋ช
๋ น์ด 2 (3๋ฒ์งธ ์ธ์)
return (0);
}
main ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ฒดํฌ
step 2
pipe ์์ฑ
step 3
fork
์์๊ณผ ๋ถ๋ชจ ์ ์์ฑ๋๊ณ ์ ๋ฉ์ถ๋์ง ํ์ธ
step 4
if๋ก ์ญํ ๋ถ๊ธฐ
step 5
pipe ํ์ค ์ ์ธ๋ ฅ ์ฐ๊ฒฐ
step 6
๋ฐ์ดํฐ ์ ์กํ์ธ
step 7
์๋ฌ์ฒดํฌ
- ์ฐ๊ธฐ๊ฐ ๋์ง ์์ ๊ฒฝ์ฐ
- ์ฝ๊ธฐ๊ฐ ๋์ง์์ ๊ฒฝ์ฐ
- ์ด๋ ํ ์ด์ ๋ก ์์์ด ์ฃฝ์ ๊ฒฝ์ฐ
- ์ด๋ ํ ์ด์ ๋ก ๋ถ๋ชจ๊ฐ ์ฃฝ์ ๊ฒฝ์ฐ