νμ΄ν ν΅μ μ κ°λ κ³Ό κ°λ¨ν μμ μ½λλ₯Ό ν¬μ€ν νλλ‘ νκ² λ€.
νμ΄νμ κ°λ
- λ νλ‘μΈμ€ κ° ν΅μ μ μ§μνλ νΉμ νμΌ
- κ·Έλ₯ νμ΄ν(μ΄λ¦μλ νμ΄ν)λ λΆλͺ¨-μμ νλ‘μΈμ€ ν΅μ μ μ§μ
- κΈ°λ³Έμ μΌλ‘ λ¨λ°©ν₯μ΄λ€.
- μλ°©ν₯ ν΅μ μ μν΄μλ νμ΄νλ₯Ό 2κ° μμ±νλ©΄ λλ€.
νμ΄ν λ§λ€κΈ°
int pipe(int fd[2]);λ‘ μμ±νλ€. μ΄ λ, fd[0]μ μ½κΈ°, fd[1]μ μ°κΈ°μ©μ΄λ€.
μ΄ μ½κΈ°μ μ°κΈ°λ₯Ό μ΄λ»κ² μ¬μ©νλλμ λ°λΌ λ°©ν₯μ΄ κ²°μ λλ€κ³ 보면 λλ€.
μ±κ³΅μ 0, μ€ν¨μ -1μ λ°νν΄μ€λ€.
pipe ν¨μμ ν΅μ κ³Όμ
1. pipe ν¨μ νΈμΆ ν νμΌκΈ°μ μ(fd[])μμ±.
2. fork() ν¨μλ‘ μμ νλ‘μΈμ€λ₯Ό μμ±νλ©΄, pipeλ ν¨κ» 볡μ¬λλ€. κ·Έλ¬λ λ°λ‘ μνλλ κ²μ μλλ€!!
3. λ¨λ°©ν₯μ κ²½μ° ν΅μ λ°©ν₯μ κ²°μ νλ€.
μ΄ λ readμ write νμΌ κΈ°μ μλ₯Ό κ°κ° λκ° μ¬μ©νλλμ λ°λΌμ λ°©ν₯μ΄ κ²°μ λλ€. μ¬μ§μ λΆλͺ¨κ° μ°κ³ μμμ΄ μ½λ λΆλͺ¨ -> μμ λ°©ν₯ ν΅μ μ΄λ€.
4.μλ°©ν₯μ κ²½μ° νμΌκΈ°μ μλ₯Ό νλ λ μμ±νμ¬, λ¨λ°©ν₯ νμ΄νλ₯Ό 2κ° μ¬μ©νλ μλ¦¬λ‘ μλ°©ν₯ ν΅μ μ νλ€.
μμ μ½λ λ° λ¬Έμ
μμ μ½λ : λΆλͺ¨-μμ μλ°©ν₯ ν΅μ
... 07 int main(void) { 08 int fd1[2], fd2[2]; 09 pid_t pid; 10 char buf[257]; 11 int len, status; 12 13 if (pipe(fd1) == -1) { 14 perror("pipe"); 15 exit(1); 16 } 17 18 if (pipe(fd2) == -1) { 19 perror("pipe"); 20 exit(1); 21 } 22 23 switch (pid = fork()) { 24 case -1 : 25 perror("fork"); 26 exit(1); 27 break; 28 case 0 : /* child */ 29 close(fd1[1]); 30 close(fd2[0]); 31 write(1, "Child Process:", 15); 32 len = read(fd1[0], buf, 256); 33 write(1, buf, len); 34 35 strcpy(buf, "Good\n"); 36 write(fd2[1], buf, strlen(buf)); 37 break; 38 default : 39 close(fd1[0]); 40 close(fd2[1]); 41 buf[0] = '\0'; 42 write(fd1[1], "Hello\n", 6); 43 44 write(1, "Parent Process:", 15); 45 len = read(fd2[0], buf, 256); 46 write(1, buf, len); 47 waitpid(pid, &status, 0); 48 break; 49 } 50 51 return 0; 52 }
|
μ€ν κ²°κ³Ό
Child Process:Hello Parent Process:Good |
μμ© λ¬Έμ μ½λ : λΆλͺ¨-μμ μλ°©ν₯ νμ΄νλ‘ μμλλ‘ μ¬λ¬ λ² ν΅μ νκΈ°
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <stdlib.h> #include <sys/wait.h> #include <string.h> int main(void) { int fd1[2], fd2[2]; pid_t pid; char buf[257], str[257]; int len, status, i, j; if (pipe(fd1) == -1) { perror("pipe"); exit(1); } if (pipe(fd2) == -1) { perror("pipe"); exit(1); } switch (pid = fork()) { case -1 : perror("fork"); exit(1); break; case 0 : close(fd1[1]); close(fd2[0]); for(i=1; i<11; i++){ sleep(1); str[0]='\0'; sprintf(str, "Child Process %d : ", i); write(1, str, 17); len=read(fd1[0],buf,256); write(1,buf,len); buf[0]='\0'; sprintf(buf, "Good %d",i); strcat(buf,"\n"); write(fd2[1],buf,strlen(buf)); sleep(1); } break; default : close(fd1[0]); close(fd2[1]); buf[0] = '\0'; str[0]='\0'; for(j=1;j<11;j++){ buf[0]='\0'; sleep(1); sprintf(buf, "Hello %d", j); strcat(buf,"\n"); write(fd1[1], buf, strlen(buf)); sleep(1); sprintf(str,"Parent Process %d : ",j); write(1, str, 19); len=read(fd2[0],buf,256); write(1,buf,len); } waitpid(pid, &status, 0); break; } return 0; } |
μ€ν κ²°κ³Ό
μμ νλ‘μΈμ€ : λΆλͺ¨νλ‘μΈμ€ μλ΅
λΆλͺ¨ νλ‘μΈμ€ : μμνλ‘μΈμ€ μλ΅
μ΄ μμλλ‘, μ°¨λ‘μ°¨λ‘ λνλλ€.(sleep(1) μ¬μ©)
μ΄λ―Έμ§ νμΌ μΆμ² : μ λμ€ μμ€ν νλ‘κ·Έλλ°(νλΉλ―Έλμ΄)
'Basics > Develop' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JS]JSON key κ°μ Έμ€κΈ°, keys(), getOwnPropertyNames(), for λ±λ± λΉκ΅ (0) | 2021.09.07 |
---|---|
[JS]ν€λ³΄λ μ΄λ²€νΈ, Enter μ΄λ²€νΈ, key μ΄λ¦, keyCode μ΄μ 리 (0) | 2021.08.25 |
λ§₯(mac) VSCode λ¨μΆν€ μ΄μ 리! μλμ° λ¨μΆν€μ λΉκ΅! (0) | 2021.08.20 |
[CMD] C:μμ D: λ‘ cd (cd c: to d:) (0) | 2021.07.20 |
[Python].csv samples .csv νμΌ μμ λ€μ΄λ‘λ (0) | 2020.10.29 |
λκΈ