Bài tập message queue pipe share memory in linux

Prerequisite : Inter Process Communication A message queue is a linked list of messages stored within the kernel and identified by a message queue identifier. A new queue is created or an existing queue opened by msgget(). New messages are added to the end of a queue by msgsnd(). Every message has a positive long integer type field, a non-negative length, and the actual data bytes (corresponding to the length), all of which are specified to msgsnd() when the message is added to a queue. Messages are fetched from a queue by msgrcv(). We don’t have to fetch the messages in a first-in, first-out order. Instead, we can fetch messages based on their type field. All processes can exchange information through access to a common system message queue. The sending process places a message (via some (OS) message-passing module) onto a queue which can be read by another process. Each message is given an identification or type so that processes can select the appropriate message. Process must share a common key in order to gain access to the queue in the first place.

Bài tập message queue pipe share memory in linux

System calls used for message queues:

  • ftok(): is use to generate a unique key.
  • msgget(): either returns the message queue identifier for a newly created message queue or returns the identifiers for a queue which exists with the same key value.
  • msgsnd(): Data is placed on to a message queue by calling msgsnd().
  • msgrcv(): messages are retrieved from a queue.
  • msgctl(): It performs various operations on a queue. Generally it is use to destroy message queue.

MESSAGE QUEUE FOR WRITER PROCESS

C

`

include <stdio.h> `

`

include <sys/ipc.h> `

`

include <sys/msg.h> `

`

define MAX 10 `

struct mesg_buffer {

long mesg_type;

`

include <sys/ipc.h> 0

include <sys/ipc.h> `1

`

include <sys/ipc.h> `2

`

include <sys/ipc.h> 3

include <sys/ipc.h> `4

`

include <sys/ipc.h> `5

`

include <sys/ipc.h> `7

`

include <sys/ipc.h> 3

include <sys/msg.h> `0

`

include <sys/msg.h> 2

include <sys/msg.h> 3

include <sys/msg.h> `4

`

include <sys/msg.h> `6

`

include <sys/msg.h> `8

`

define MAX 10 0

define MAX 10 1

define MAX 10 2

define MAX 10 `3

`

define MAX 10 5

define MAX 10 `6

`

define MAX 10 8

define MAX 10 `9`struct`0

`

define MAX 10 0

define MAX 10 `1`struct`4`struct`5

`struct`7 `struct`8

`struct`9

MESSAGE QUEUE FOR READER PROCESS

C

`

include <stdio.h> `

`

include <sys/ipc.h> `

`

include <sys/msg.h> `

struct mesg_buffer {

long mesg_type;

`

include <sys/ipc.h> 0

include <sys/ipc.h> `1

`

include <sys/ipc.h> `2

`

include <sys/ipc.h> 3

include <sys/ipc.h> `4

`

include <sys/ipc.h> `5

`

include <sys/ipc.h> `7

`

include <sys/ipc.h> 3

include <sys/msg.h> `0

`

include <sys/msg.h> 2

include <sys/msg.h> 3

include <sys/msg.h> `4

`

include <sys/msg.h> `6

long`7

define MAX 10 `9`long`9

`

define MAX 10 0

define MAX 10 `1`mesg_type; `3`mesg_type; `4

`mesg_type; `5`mesg_type; `6

`mesg_type; `8

`struct`7 `struct`8

`struct`9

Output:

Bài tập message queue pipe share memory in linux

Last Updated : 25 Nov, 2020

Like Article

Save Article