파이프를 이용한 프로세스간 통신 구현(숫자 맞추기 게임)
본 자료는 6페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
해당 자료는 6페이지 까지만 미리보기를 제공합니다.
6페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

파이프를 이용한 프로세스간 통신 구현(숫자 맞추기 게임)에 대한 보고서 자료입니다.

목차

1. 숫자 비교 게임 설명
1.1 게임 방법
1.2 처리 조건

2. 프로그램 구조도

3. 프로그램 분석
3.1 main 프로그램 분석
3.2 judge 프로그램 분석
3.3 player 프로그램 분석

4. 실행결과

5. 전체소스 및 주석

6. 참고문헌

7. 프로그램을 마치며

본문내용

n = FALSE;
}
}
}
if(Repetition)
{
printf("%d 번 게이머 프로세스가 검사한 결과 : \n\n %d 번
게이머가 입력값한 값은 같은값 중복입력입니다.\n", PlayerID + 1,
IndexPlayer + 1);
}
}
// 파이프 닫기
close(WriteFD);
close(ReadFD);
// 파이프 삭제
sprintf(PIPENAME,"READPIPE%d",PlayerID+1);
unlink(PIPENAME);
sprintf(PIPENAME,"WRITEPIPE%d",PlayerID+1);
unlink(PIPENAME);
exit(0);
}
5. 4 기타 파일들
stdfunc.c
#include
#include "stdfunc.h"
void ErrorMsg(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
MAKEFILE
all : main.o judge.o player.o stdfunc.o
gcc main.o judge.o player.o stdfunc.o -o start
main.o : main.c
gcc -c main.c
judge.o : judge.c judge.h
gcc -c judge.c
player.o : player.c player.h
gcc -c player.c
stdfunc.o : stdfunc.c stdfunc.h
gcc -c stdfunc.c
6. 참고 문헌
- 프로그래머와 사용자를 위한 UNXI 완성 완전한 안내서 조경산 역 이한출판사 2002 p.433-453, p511-534
- TCP/IP 소켓 프로그래밍 윤성우 FREELET 2004, p.21-37, p.263-p.277, p.231-p.239
- UNIX 시스템 프로그래밍 원유원, 백정현 정익사 1995 p.259-p.290
- UNIX NETWORK PROGRAMMING 김치하외1명 역 대영사 1992 p.244-p.259
- GNU Software GNU 소프트웨어로 프로그래밍하기 이기동 역 2000 한빛미디어 p.199-p.217
- unix.co.kr Unix System Programming 1~10 - 김성호(moohou)
http://unix.co.kr/stories.php?story=02/12/13/9474369
- http://www.chongju-e.ac.kr/~cmyang/lecture/cprg/socket.ppt
- http://kmh.ync.ac.kr/NetworkProg/network/basicfunc.html
7. 프로그램을 마치며
처음 방향을 소켓 쪽으로 정해서 시작을 했습니다. 그런데 프로세스 생성하는 부분에서 막혔습니다. 사용자에게 입력을 받아서 원하는 만큼 fork로 프로세스를 생성해야 하는 부분에서 이상하게 프로세스가 제가 생각하는 것보다 많이 생기는 것이 었습니다. 아직도 프로세스에 생성에 대한 개념이 몸에 익지 않은 듯 합니다. 저는 for문에서 원하는 만큼 반복하고 거기서 fork로 player프로세스를 생성하게 구조를 잡았는데 이상하게 제가 생각하는 것보다 더 많은 프로세스가 생겼습니다. 그 부분에러 찾느라 거의 10시간 이상을 허비했는데 나중에 알고 보니까 for루프에서 fork로 프로세스를 생성할 때 자식 프로세스면 player를 수행하고 부모면 그냥 아무것도 안해야 하는 로직이었습니다. 안 그러면 부모로 다시 for루프를 실행하고 거기서 프로세스가 생성이 되기 때문입니다.
처음에는 소켓을 이용해서 메인 프로그램에서 사용자 많큼 클라이언트를 만들고 서버는 하나만 만들어서 클라이언트 / 서버 모델로 구현하려고 구성을 잡았었습니다. 그런데 소켓이 작동을 안 했습니다. 디버깅을 하려고 printf문으로 한 문장씩 내려가면서 해도 어디서 에러가 나는지 조차 모르겠어서 방향을 파이프로 바꿨습니다.
파이프로 처음에 생각한 것은 메인 프로그램에서 프로세스를 하나 복사해서 자식은 심판자로 사용하고 부모 프로세스에서 원하는 만큼 프로세스를 생성한 다음 각각의 프로세스에서 사용자에게 데이터를 입력받고, 입력받은 데이터를 심판자한테 보낸 다음 심판자는 모든 경기자의 데이터를 다 보관하고 있는 구조를 생각했습니다. 그런데 구현하다보니까 경기자 프로세스가 다른 경기자가 데이터를 중복 사용하는지 체크하는 부분을 알려고 하니까 여러번 심판자와 데이터를 주고 받아야 하는 상황이 벌어질 것 같았습니다.
그래서 다시 생각을 한게 아예 메인 프로그램에서 사용자에 대한 데이터를 사용자 ID와 데이터를 배열로 가지고 있다가 player가 수행될 때 다 넘겨주면 간단하게 해결 할 수 있었습니다.
파이프로 통신을 하면서 고생을 했던게 읽기를 위해서 open할 때 쓰기를 위해 open한 프로세스가 없으면 block되고 쓰기를 위해 open할 때 읽기를 위해 open한 프로세스가 없으면 역시 block되고 read, write도 마찬가지구요. 그부분이 이해가 안되서 한참을 고생했습니다. 프로그램이 한 소스에서 돌아가는게 아니라 경기자에서 보내면 심판자는 받아야 하니까 두 개를 번갈아가면서 생각해야 하는게 아직도 완벽하게 이해가 가지 않습니다.
아직도 이해 가지 않는 부분은 write나 read의 경우 char* buff에 파이프에서 읽어온 값을 저장하는데 저는 int형으로 했는데 제대로 값이 출력 됩니다. 처음에 char* 로 변환해서 보내고 받아서 다시 int형으로 변환한 후 사용할려고 생각해서 그렇게 구현하다보니까 귀찮은 점이 있었습니다. 그래서 그냥 int형으로 했는데 아무 이상 없이 잘 구현 됩니다. 이부분은 아직도 이해가 안갑니다. 마지막으로,
제가 만든 프로그램의 장점은
1) 프로그램의 구조가 간단하면서 모든 기능을 수행한다는 것.
2) 입력이 잘 못됐을 경우 올바른 사용 예를 보여준다는 것.
제가 만든 프로그램의 단점은
1) 프로그램의 구조가 너무 단순하다는 것.
2) 9명 이상은 게임을 못한다는 것.
발전 시켜야 할 사항은
1) 사용자 수에 상관없이 게임을 할 수 있게 수정
2) 소켓통신으로 원격지에서도 게임 가능하게 수정

키워드

pipe,   process,   fork,   소스,   숫자,   맞추기,   unix,   통신
  • 가격2,000
  • 페이지수18페이지
  • 등록일2004.08.04
  • 저작시기2004.08
  • 파일형식한글(hwp)
  • 자료번호#262478
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니