질문] IPC[서로 다른 프로그램간의 통신]
예를 들어서 설명할께요.
Server Program:: "ServerControlWindow"
Client Program:: "ClientDrawingWindow"
ServerControlWindow::
main(){
.
.
.
ClientDrawingWindow를 invoke한다.
.
ClientDrawingwindow에게 뭔가를 그리라고 지시한다.
ClientDrawingwindow에게 그리라고 지시한다음 시그날을 받아
제대로 그렸는지 확인한다.
ClientDrawingwindow로부터 시그날을 받에 거기에 정해져 있는
procedure를 진행한다.
ServerControlwindow <--> ClientDrawwindow
서로 데이타를 주고 받고 작업을 한다.
exit신호를 ClientDrawingwindow에게 보낸다.
}
서로 다른 GUI를 쓰기 때문에 이렇게 해줘야 합니다.
데이타를 주고 받을때 파일을 사용하지 않고 하고 싶습니다.
뭘써야 하죠 IPC를 구현한적이 없어서 대충 example이라도
유닉스네트웍프로그램 책을 보는데 빨리 할려고 해서 그런지
잘 이해가 안돼네요. 답변에 감사드리고 좋은 하루 돼세요.
********추가내용********
메세지는 서로 주고 받아야지돼고 데이타 양은 string정도입니가.
그리고 remote가 아니고 하나의 machine에서 동시에 데이타를 주고 받습
니다.
***********************
파일을 안 쓰실려면 소켓이 좋지 않을까 합니다만...
파일을 안 쓰실려면 소켓이 좋지 않을까 합니다만...
Re: 질문] IPC[서로 다른 프로그램간의 통신]
여러가지 구현 방법이 있겠지만, 지금 같은 경우,
서버와 클라이언트가 로컬(한대의 컴퓨터내)상에서 작동하는 경우라면,
pipe 를 이용하기도 합니다.
remote 라면 소켓을 쓰구요.
물론 local 에서도 소켓을 이용할 수 있습니다.
예제로 보아, client 쪽이 그림 그리는 작업 뿐이라면, XWindow에서
원격 display 를 열 수도 있습니다.
Orion Project : http://orionids.org
IPC를 언급하셨으니 remote가 아닌 local process로 간주
IPC를 언급하셨으니 remote가 아닌 local process로 간주하고 적습니다.
데이터양이 적다면(주로 어떤 시그널을 보내는데만 사용한다면) message queue를 사용하세요.
ftok(), msgget(), msgsnd(), msgctl() 의 man page를 참고하세요.
데이터의 양이 많다면 message queue 와 shared memory를 동시에 사용하십시요.
즉 msg queue로는 시그널을 보내고, shared memory로는 데이터를 주고받는겁니다.
shmget(), shmctl(), shmat(), shmdt()등의 man page를 참고하세요.
/***********************
* while(1) sleep(INFINITE);
***********************/
댓글 달기