2011년7월20일_프로세스간 파이프를 통한 통신, pipe()...슈퍼마리오의 배관이라 생각하면되!!
시간 없어어엉어어어엉어~
문서정리해 업로드하는게 왜 이렇게 힘든지...ㅠㅠ
참조(Reference) |
1: // pipe1.c 2: #include <stdio.h>
3: #include <unistd.h>
4: #include <stdlib.h>
5:
6: #define BUFSIZE 30 7:
8: int main(int argc, char *argv[]) 9: {
10: int fd[2]; //파이프 출입구를 담을 디스크립터 11: char buffer[BUFSIZE]; //문자열을 담을 버퍼 12: pid_t pid; //자식프로세스의 pid값을 담을 변수 13: int state; //상태를 저장할 변수 14:
15: state = pipe(fd); //하나의 파이프를 생성하고, 16: //두 개의 파일디스크립터도 생성한다. 17: //이 파이프를 통해 부모/자식 프로세스간 통신. 18:
19: if(-1 == state) //파이프생성 실패시 처리 20: {
21: fprintf(stderr, "pipe() error\n"); 22: exit(1);
23: }
24:
25: pid = fork(); //프로세스 복사해 자식프로세스 생성 26:
27: if(-1 == pid) //프로세스 복사 실패시 처리 28: {
29: fprintf(stderr, "fork() error\n"); 30: exit(1);
31: }
32: else if(0 == pid) //자식프로세스 역활 33: { //파이프 입구로 "Good \n"문자열 전송 34: write(fd[1], "Good \n", 7); 35: }
36: else //부모프로세스 역활 37: { //파이프 출구로 부터 데이터 수신. 38: read(fd[0], buffer, BUFSIZE);
39: puts(buffer);
40: }
41:
42: return 0; 43: }
|
1: // pipe2.c 2: #include <stdio.h>
3: #include <unistd.h>
4: #include <stdlib.h>
5:
6: #define BUFSIZE 30 7:
8: int main(int argc, char *argv[]) 9: {
10: int fd[2]; //파이프 출입구를 담을 디스크립터 11: char buffer[BUFSIZE]; //문자열을 담을 버퍼 12: pid_t pid; //자식프로세스의 pid값을 담을 변수 13: int state; //상태를 저장할 변수 14:
15: state = pipe(fd); //하나의 파이프를 생성하고, 16: //두 개의 파일디스크립터도 생성한다. 17: //이 파이프를 통해 부모/자식 프로세스간 통신. 18:
19: if(-1 == state) //파이프생성 실패시 처리 20: {
21: fprintf(stderr, "pipe() error\n"); 22: exit(1);
23: }
24:
25: pid = fork(); //프로세스 복사해 자식프로세스 생성 26:
27: if(-1 == pid) //프로세스 복사 실패시 처리 28: {
29: fprintf(stderr, "fork() error\n"); 30: exit(1);
31: }
32: else if(0 == pid) //자식프로세스 역활 33: { //부모로 "Good!"전송하고 2초대기 34: write(fd[1], "Good!", 6); 35: //sleep(2); 36: read(fd[0], buffer, BUFSIZE); //수신 37: printf("Output of child process : %s \n\n", buffer); 38: }
39: else //부모프로세스 역활 40: { //파이프 출구로 부터 데이터 수신. 41: read(fd[0], buffer, BUFSIZE);
42: printf("Output of parent process : %s \n", buffer); 43: write(fd[1], "Really Good", 12); //응답 44: sleep(3); //고아프로세스가 되지 않도록 대기 45: }
46:
47: return 0; 48: }
|
1: // pipe3.c 2: #include <stdio.h>
3: #include <unistd.h>
4: #include <stdlib.h>
5:
6: #define BUFSIZE 30 7:
8: int main(int argc, char *argv[]) 9: {
10: int fd1[2], fd2[2]; //파이프 출입구를 담을 디스크립터 11: char buffer[BUFSIZE]; //문자열을 담을 버퍼 12: pid_t pid; //자식프로세스의 pid값을 담을 변수 13:
14: if(-1 == pipe(fd1) || -1 == pipe(fd2)) //에러처리 15: {
16: fprintf(stderr, "pipe() error\n"); 17: exit(1);
18: }
19:
20: pid = fork(); //프로세스 복사해 자식프로세스 생성 21:
22: if(-1 == pid) //프로세스 복사 실패시 처리 23: {
24: fprintf(stderr, "fork() error\n"); 25: exit(1);
26: }
27: else if(0 == pid) //자식프로세스 역활 28: { //부모로 "Good!"전송하고 2초대기 29: write(fd1[1], "Good!", 6); 30: read(fd2[0], buffer, BUFSIZE); //수신 31: printf("Output of child process : %s \n\n", buffer); 32: }
33: else //부모프로세스 역활 34: { //파이프 출구로 부터 데이터 수신. 35: read(fd1[0], buffer, BUFSIZE);
36: printf("Output of parent process : %s \n", buffer); 37: write(fd2[1], "Really Good", 12); //응답 38: sleep(1); //고아프로세스가 되지 않도록 대기 39: }
40:
41: return 0; 42: }
|