IPC기법 실습 - 1

2021. 3. 9. 20:01Computer(인강)/시스템 프로그래밍

728x90
반응형

안녕하세요 bannavi입니다^ㅅ^

오늘은 IPC기법 파트에서 실습을 해보려고 합니다

바로 시작해보도록 할게요 !

 

 

 

운영체제에서는 아래와 같은 기법들만 있다 라고 말씀드리고 넘어갔었는데요

오늘은 실습을 해보려고 합니다

 

 

 

첫번째, pipe(파이프)

 

 

 

두번째, 메시지 큐(message queue)

 

msqid

msgsnd

msgget

msgflg 설정

 

 

 

메시지 큐 코드 예제

메시지를 받을때는 아이디를 똑같이 써야합니다.

 

 

이걸 받으려면 프로세스를 또 하나 만들어야되겠죠?

pipe파이프처럼 부모 자식 관계일 필요는 없는 것입니다!

메시지 큐의 데이터를 받는 코드에서도 struct를 동일하게 만들어봤구요

 

새로운 프로세스를 실행하고 동일한 messagequeue의 아이디를 가지고 해당 주소를 접근하면  거기있는 데이터를 읽을 수 있는것입니다.

 

이 예제는 하나의 프로그램 안에서 전송을 하고 바로 그 데이터를 받도록 만들어진 예제이다.

하나의 프로세스 안에서 메시지 큐를 전송하고 받기까지 한것.

IPC기법과는 다르게 조금 특이하게 쓴건데, 뭘 보여주려고 했냐면

 

메시지큐는 부모에서 자식 방향으로만 데이터를 보낼 수 있는게 아니라(이건 파이트pipe),

자식이 부모에게 보낼수도 있고 자기가 자신에게 보낼 수도 있다. 양방향이 가능하다 라는것을 보여주려고 했음.

 

실행하자마자 이 데이터를 전송하고 데이터를 다시 바로 받아와서 출력이 된것을 보실 수 있습니다.

 

 

해당 디렉토리든 파일이든(inode값) 아무튼 이것과 임의 숫자값을 조합해서 아주 unique유니크한 키값을 만들어냅니다.

자식프로세스, 부모프로세스 등 여러 프로세스에서 동일하게 같은 값으로 받아올 수 있고

그 값을 가지고 메시지큐를 생성할수도 있다.

 

다만 저기 빨간색으로 명시되어있는 파일을 지웠다가 재생성한다던지, 이 디렉토리를 지웠다가 재생성하면

inode값이 달라지기 때문에, 그러면 key키값도 달라집니다.(이부분은 참고로만 알아두기)

728x90
반응형