2021. 3. 9. 20:01ㆍComputer(인강)/시스템 프로그래밍
안녕하세요 bannavi입니다^ㅅ^
오늘은 IPC기법 파트에서 실습을 해보려고 합니다
바로 시작해보도록 할게요 !
운영체제에서는 아래와 같은 기법들만 있다 라고 말씀드리고 넘어갔었는데요
오늘은 실습을 해보려고 합니다
첫번째, pipe(파이프)
두번째, 메시지 큐(message queue)
msqid
msgsnd
msgget
msgflg 설정
메시지 큐 코드 예제
메시지를 받을때는 아이디를 똑같이 써야합니다.
이걸 받으려면 프로세스를 또 하나 만들어야되겠죠?
pipe파이프처럼 부모 자식 관계일 필요는 없는 것입니다!
메시지 큐의 데이터를 받는 코드에서도 struct를 동일하게 만들어봤구요
새로운 프로세스를 실행하고 동일한 messagequeue의 아이디를 가지고 해당 주소를 접근하면 거기있는 데이터를 읽을 수 있는것입니다.
이 예제는 하나의 프로그램 안에서 전송을 하고 바로 그 데이터를 받도록 만들어진 예제이다.
하나의 프로세스 안에서 메시지 큐를 전송하고 받기까지 한것.
IPC기법과는 다르게 조금 특이하게 쓴건데, 뭘 보여주려고 했냐면
메시지큐는 부모에서 자식 방향으로만 데이터를 보낼 수 있는게 아니라(이건 파이트pipe),
자식이 부모에게 보낼수도 있고 자기가 자신에게 보낼 수도 있다. 양방향이 가능하다 라는것을 보여주려고 했음.
실행하자마자 이 데이터를 전송하고 데이터를 다시 바로 받아와서 출력이 된것을 보실 수 있습니다.
해당 디렉토리든 파일이든(inode값) 아무튼 이것과 임의 숫자값을 조합해서 아주 unique유니크한 키값을 만들어냅니다.
자식프로세스, 부모프로세스 등 여러 프로세스에서 동일하게 같은 값으로 받아올 수 있고
그 값을 가지고 메시지큐를 생성할수도 있다.
다만 저기 빨간색으로 명시되어있는 파일을 지웠다가 재생성한다던지, 이 디렉토리를 지웠다가 재생성하면
inode값이 달라지기 때문에, 그러면 key키값도 달라집니다.(이부분은 참고로만 알아두기)
'Computer(인강) > 시스템 프로그래밍' 카테고리의 다른 글
시그널 동작 매커니즘 01 사용법 이해 (0) | 2021.03.10 |
---|---|
IPC기법 - 02 실습2 (0) | 2021.03.10 |
프로세스 스케쥴링 관련(참고) (0) | 2021.03.09 |
프로세스 생성과 종료 총정리 및 wait 시스템콜 상세 (0) | 2021.03.09 |
프로세스 종료 (0) | 2021.03.09 |