인공지능실험실 석사 2학기 이희재 lhuijae@ai.hannam.ac.kr TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재 lhuijae@ai.hannam.ac.kr.

Slides:



Advertisements
Similar presentations
Network Lab. Byoung-Son, Choi
Advertisements

Network Lab. Young-Chul Hwang
9 파이프.
PHP입문 Izayoi 김조흔.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
Linux Socket Programming - Introducing Sockets –
인공지능실험실 석사 2학기 김승겸 TCP/IP Socket Programming… 제 10장 멀티태스킹 기반의 서버구현 인공지능실험실 석사 2학기 김승겸
Signal & Inter-Process Communication
Department of Computer Engineering
Department of Computer Science and Engineering
6 프로세스 생성과 실행.
Department of Computer Science and Engineering
Multimedia & Mobile Communications Lab.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
제 12장 I/O멀티플렉싱(Multiplexing)
제 14장 Multicast & Broadcast
Department of Computer Engineering
Department of Computer Engineering
Department of Computer Engineering
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
Linux서버를 이용한 채팅프로그램 지도 교수님 : 이형원 교수님 이 름 : 이 은 영 학 번 :
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
12장 파이프.
fork로 생성한 자식 프로세스에서 exec 함수군을 호출
Multi-thread Programming
07. 디바이스 드라이버의 초기화와 종료 김진홍
고급 입출력 함수 School of Electronics and Information. Kyung Hee University.
Signal & Inter-Process Communication
Term Project Team Member
Department of Computer Engineering
프로세스 생성[1] 프로그램 실행 : system(3) #include <stdlib.h>
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
파이프와 exec 시스템 호출 (ls | wc)
Homework 6… 12월 2일(금) 11:59pm까지 자신의 이름과 학번을 출력해 주는 유닉스/리눅스 네트워크 소켓 서버 프로그램 과 클라이언트 프로그램 을 작성해 보세요 참고 (실습1) Hello 프로그램 helloserver.c helloclient.c 컴파일.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
8 메모리 매핑.
(ioctl, mmap, fsync&flush)
4장 파일.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
Department of Computer Science and Engineering
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
Department of Computer Engineering
Signal & Inter-Process Communication
13장 프로세스 사이의 통신.
영상처리 실습 인공지능연구실.
19. 함수 포인터와 void 포인터.
TCP / IP 소켓 프로그래밍 3주차 ( Ch.10 ~ Ch.14 ).
School of Electronics and Information. Kyung Hee University.
오라클 넷(Oracle Net)의 개념 및 구성
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 18장 윈도우 기반 쓰레드 사용하기 데이터베이스실험실 석사 2학기 조정희
Department of Computer Engineering
TCP / IP 소켓 프로그래밍 4주차 ( Ch.15 ~ Ch.18 + α ).
Department of Computer Engineering
자바로 만든 채팅 프로그램 임경진 조주경 지도교수님 : 이광세 교수님.
Signal & Inter-Process Communication
Department of Computer Engineering
다중처리 기술 School of Electronics and Information. Kyung Hee University.
구조체(struct)와 공용체(union)
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
9 파이프.
argc, argv 의 사용방법 #include <stdio.h>
Department of Computer Engineering
Signal & Inter-Process Communication
Network Lab. Young-Chul Hwang
CODE INJECTION 시스템B 김한슬.
버스와 메모리 전송 버스 시스템 레지스터와 레지스터들 사이의 정보 전송을 위한 경로
Signal & Inter-Process Communication
Presentation transcript:

인공지능실험실 석사 2학기 이희재 lhuijae@ai.hannam.ac.kr TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재 lhuijae@ai.hannam.ac.kr

목차 프로세스간 통신 가위 바위 보 게임 구현하기

프로세스간 통신 독립된 메모리 영역 파이프 라인 생성 기법 이용 pipe 함수 이용 fd[0]에는 데이터를 입력할 수 있는 파일 디스크립터 fd[1]에는 데이터를 출력할 수 있는 파일 디스크립터 생성된 파이프는 프로세스에 종속적이지 않다. #include <unistd.h> int pipe(int fd[2]); 성공 시 0, 실패 시 -1을 리턴

파이프를 통해서 부모 프로세스와 자식 프로세스는 데이터를 주고 받는다. 프로세스간 통신 파이프를 이용한 프로세스간 통신 Fd[0] 파이프 출구 Parent process P I P E Fd[1] 파이프 입구 Child process 파이프를 통해서 부모 프로세스와 자식 프로세스는 데이터를 주고 받는다.

프로세스간 통신 pipe1.c #include<stdio.h> #include<unitd.h> #include<stdlbi.h> #define BUFSIZE 30 Int main(int argc, char **argv) { int fd[2]; char buffer[BUFSIZE]; pid_t pid; int state; state = pipe(fd); // 파이프 생성 if(state == -1) { puts(“pipe() error”); exit(1); } pid = fork(); // 자식 프로세스 생성 if(pid == -1) { puts(“fork() error”); exit(1); } else if(pid == 0) { // 자식 프로세스 write(fd[1], “Good”\n”, 6); else { // 부모 프로세스 read(fd[0], buffer, BUFSIZE); puts(buffer); return 0;

프로세스간 통신 실행 결과

프로세스간 통신 파이프에 대한 고찰(1) 자식프로세스에게 파이프 복사? P I E 프로세스 영역 커널 영역 1. Pipe 함수 호출로 파이프 생성 용청 P I E 2. 요청에 의해 파이프 생성 3. 요청한 프로세스에 파일 디스크립터 전달 프로세스에 독립적인 파이프 생성

프로세스간 통신 파이프에 대한 고찰(2) 통신 방향 설정 P I P E Parent Process Child Process fd[0] fd[1] fd[0] fd[1] P I P E 출구 입구 프로세스간 파이프 공유

프로세스간 통신 파이프에 대한 고찰(2) pipe2.c ........... else if(pid == 0) { // 자식 프로세스 write(fd[1], “Good!”, 6); sleep(2); read(fd[0], buffer, BUFSIZE); printf(“자식프로세스출력 : %s\n”, buffer); } else { // 부모 프로세스 printf(“부모프로세스출력 : %s\n”, buffer); write(fd[1], “Really Good”, 12); } ■ 부모와 자식간에 문자열을 전송 ■ sleep(2) 함수로 2초간 대기 ■ 하나의 파이프를 서로 공유 실행결과

프로세스간 통신 파이프에 대한 고찰(2) pipe2.c ........... else if(pid == 0) { // 자식 프로세스 write(fd[1], “Good!”, 6); //sleep(2); read(fd[0], buffer, BUFSIZE); printf(“자식프로세스출력 : %s\n”, buffer); } else { // 부모 프로세스 printf(“부모프로세스출력 : %s\n”, buffer); write(fd[1], “Really Good”, 12); } ■ sleep(2) 함수 주석처리 ■ 하나의 파이프를 부모와 자식 모두 공유 ■ 부모 프로세스는 블로킹 실행결과

프로세스간 통신 파이프에 대한 고찰(3) 양 방향 데이터 송신 파이프 2개 생성하여 입출력 분리 P I P E Parent Process Parent Process 프로세스간 양 방향 통신 모델

프로세스간 통신 파이프에 대한 고찰(3) pipe3.c ........... else if(pid == 0) { // 자식 프로세스 write(fd1[1], “Good!”, 6); read(fd2[0], buffer, BUFSIZE); printf(“자식프로세스출력 : %s\n”, buffer); } else { // 부모 프로세스 read(fd1[0], buffer, BUFSIZE); printf(“부모프로세스출력 : %s\n”, buffer); write(fd2[1], “Really Good”, 12); } ■ pipe(fd1); pipe(fd2); ■ 파이프를 2개 만든다. ■ 프로세스는 입출력시 서로 다른 파이프 이용 실행결과

가위 바위 보 게임 구현하기 흐름도 ■ 두개의 파이프를 생성하고 클라이언트 연결 대기 ■ 연결 요청 수락, 자식 프로세스 생성 1.연결요청 ■ 두개의 파이프를 생성하고 클라이언트 연결 대기 ■ 연결 요청 수락, 자식 프로세스 생성 ■ 부모 프로세스는 콘솔에서 입력받고, 자식 프로세스는 클라이언트로부터 입력 받는다. ■ 파이프를 통해 자식 프로세스가 가지고 있는 클라이언트의 선택을 입력받는다. ■ 두 값을 비교 ■ 결과를 파이프를 통해 자식에게 전송, 자식은 클라이언트에게 결과 값 전송 Parent process Clinet 2.fork P I P E 3.연결완료 데이터송수신 Child process 가위 바위 보 게임 흐름도

가위 바위 보 게임 구현하기 실행 결과 SERVER Client

참고문헌 “UNIX Network Programming”, W.Richard Stevens “TCP/IP 소켓 프로그래밍”, 윤성우 저

Q & A