pipe - whdlgp/system_programming_pra GitHub Wiki
์ ๋์ค ์์คํ ์์ ์ฌ๋ฌ ์ฐ๋๋๊ฐ ์ปค๋ฎค๋์ผ์ด์ ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. RTOS๋ฅผ ์ฌ์ฉํ ๋์๋ ์ฃผ๋ก ํ๋ฅผ ํ๋ ๋ง๋ค์ด ์ด์ฉํ๋๋ฐ, ์ ๋์ค์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ํ๋ค.
- ๊ณต์ ์์ ์์ญ(์ ์ญ๋ณ์ ๊ฐ์)
- ์์ผํต์
- Pipe
์ด์ค Pipe๋ ๋๊ฐ์ ํ์ผ ๋์คํฌ๋ฆฝํฐ๋ฅผ ์ด์ฉํด ์ปค๋ฎค๋์ผ์ด์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
pipe(ํ์ผ ๋์คํฌ๋ฆฝํฐ ๋ฐฐ์ด(๊ธธ์ด2))
ํ์ผ ๋์คํฌ๋ฆฝํฐ๋ฅผ ๊ธธ์ด๊ฐ 2์ธ ๋ฐฐ์ด๋ก ์ ์ธํ๋ค. ํ์ผ ๋์คํฌ๋ฆฝํฐ๋ฅผ ์ ์ธํ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
int fd[2];
๊ทธ ํ ํ์ผ์ open ํ ํ์ pipe ํจ์๋ฅผ ์ด์ฉํ๋ค๋ฉด
pipe(fd);
- fd[1]๋ก ๊ฐ์ ์จ ๋ฃ์ผ๋ฉด
- fd[0]์ผ๋ก ๊ฐ์ ์ฝ์ ์ ์๋ค.
#include <stdio.h>
#include <unistd.h>
#include <wait.h>
#include <stdlib.h>
#define BUFSIZE 8192
int main()
{
char inbuf[BUFSIZE];
int p[2], j, pid;
/* open pipe */
if(pipe(p) == -1)
{
perror("pipe call error");
exit(1);
}
switch(pid = fork())
{
case -1: perror("error: fork failed");
exit(2);
case 0: /* if child then write down pipe */
close(p[0]); /* first close the read end of the pipe */
write(p[1], "Hello there.", 12);
write(p[1], "This is a message.", 18);
write(p[1], "How are you?", 12);
break;
default: /* parent reads pipe */
close(p[1]); /* first close the write end of the pipe */
read(p[0], inbuf, BUFSIZE); /* What is wrong here?? */
printf("Parent read: %s\n", inbuf);
wait(NULL);
}
exit(0);
}
Parent read: Hello there.This is a message.How are you?
fork ์ ์ pipe ํจ์๋ฅผ ์ฌ์ฉํด ์ปค๋ฎค๋์ผ์ด์ ์ฉ ํ์ผ ๋์คํฌ๋ฆฝํฐ๋ฅผ ์ง์ ํ๊ณ , ์์ ํ๋ก์ธ์ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ค๋ฉด ๋ถ๋ชจ ํ๋ก์ธ์ค์์ ๋ฐ๋ ๊ฐ๋จํ ์์ ๋ค.
์ฌ๊ธฐ์ ๋ณผ ์ ์, ์ฐ๋ ์ชฝ์์๋ ์ฝ๊ธฐ์ฉ p[0]๋ฅผ close ํ๊ณ , ์ฝ๋ ์ชฝ์์๋ ์ฐ๊ธฐ์ฉ p[1]์ close ํ๋ค๋ ๊ฒ์ด๋ค.
๋ํ ์ค๊ฐ์ ์ฃผ์์ผ๋ก
/* What is wrong here?? */
์ด๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ์๋๋ฐ, ์ด๋ฐ ์ํฉ์์ ๊ณผ์ฐ read ํจ์๊ฐ ์์ ์ ์ผ๋ก ๋์ํ ๊น? ๋ผ๋ ์๋ฌธ์ ๋์ง๋ ๊ฒ ๊ฐ๋ค. ์ค์ ๋ก ์ ์์ ๋ ๋ด PC ์์ ์ ์์ ์ผ๋ก ๋์ํ์๋ค. ํ์ง๋ง ์ด๊ฑด ์ฐ๊ธฐ ์๋๊ฐ ๋นจ๋๊ธฐ ๋๋ฌธ์ ์ฝ๊ธฐ ์ ์ ์ด์ด ์ข๊ฒ ๋ค ์ฐ์ฌ์ก๋๊ฒ ์๋๊น ์๊ฐํ๋ค. ๋ด๊ฐ ์๊ฐํด๋ณธ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ด๋ ๋ค.
- while ๋ฌธ์ผ๋ก ์ฝ๊ธฐ ๋์์ ์ํํ๋ค.
- ์ฝ๊ธฐ ๋์์ rio_readlineb ๋ฑ์ ์ด์ฉํ๋ค. ๋ณด๋ผ๋ '\n' ๋ฌธ์๋ฅผ ์ถ๊ฐํ๋ฉด ๋ ๊ฒ์ด๋ค.
- ๋๋ ๋ณ๋์ ํน์ํ ๋ฌธ์๋ฅผ ์ด์ฉํด "๋ฐ์ดํฐ์ ๋"์ ์๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด ๋์ง ์์๊น.
์๋ฆฌ์ผ ํต์ ์์๋ ๋ณ๋๋ก ํ๋กํ ์ฝ์ ๊ฐ๋จํ๊ฒ ๊ตฌ์ฑํด์ ํด๊ฒฐํ๋๋ฐ, ์ด๋ฐ์์ผ๋ก ์ ๊ทผํ๋๊ฒ๋ ๋๋ฆ ์ธ๋งํ ๊ฒ ๊ฐ๋ค.