From 963f77561737c9098d160a4b1d308c71ab0fdef8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20D=C5=82ugo=C5=82=C4=99cki?= Date: Sat, 21 Jun 2014 20:05:56 +0200 Subject: [PATCH] Using only one message queue. --- src/process1.c | 21 ++++++--------------- src/process2.c | 21 ++++++--------------- src/process3.c | 23 +++++++---------------- 3 files changed, 19 insertions(+), 46 deletions(-) diff --git a/src/process1.c b/src/process1.c index 2492ebe..fbbfa40 100644 --- a/src/process1.c +++ b/src/process1.c @@ -50,11 +50,8 @@ struct message * processes = NULL; /** * Message queue variables */ -key_t qkey; -int qid_input; - -int qid_output1; -int qid_output2; +key_t qkey = 12356; +int qid; struct queue_message { long mtype; @@ -72,7 +69,7 @@ void notify_other_processes(int signo) { if (i != 0 && pid != 0) { msg.mtype = i+1; fprintf(stderr, "[%s] Sending message of type (%d) with value %d\n", "process1", msg.mtype, msg.signo[0]); - msgsnd(pid, &msg, sizeof(int), 0); + msgsnd(qid, &msg, sizeof(int), 0); fprintf(stderr, "[%s] Sending signal %s (%d) to PID: %d\n", "process1", strsignal(SIGUSR1), SIGUSR1, pid); kill(pid, SIGUSR1); } @@ -90,15 +87,13 @@ void sig_handler(int signo) fprintf(stderr, "[%s] > Notified!\n", "process1"); struct queue_message msg; /* Check queues from both other processes */ - if (msgrcv(processes->pids[1], &msg, sizeof(int), 1, 0) > 0) { + if (msgrcv(qid, &msg, sizeof(int), 1, 0) > 0) { fprintf(stderr, "[%s] > Notified with value: %s!\n", "process1", strsignal(msg.signo[0])); raise(msg.signo[0]); - break; } - else if (msgrcv(processes->pids[2], &msg, sizeof(int), 1, 0) > 0) { + else if (msgrcv(qid, &msg, sizeof(int), 1, 0) > 0) { fprintf(stderr, "[%s] > Notified with value: %s!\n", "process1", strsignal(msg.signo[0])); raise(msg.signo[0]); - break; } } else if (signo == SIGTERM) { @@ -179,11 +174,7 @@ int main(void) { /** * Register message queue to communicate with other processes */ - qkey = getpid(); - qid_input = msgget(qkey, IPC_CREAT | 0666); - - qid_output1 = msgget(processes->pids[1], IPC_CREAT | 0666); - qid_output2 = msgget(processes->pids[2], IPC_CREAT | 0666); + qid = msgget(qkey, IPC_CREAT | 0666); mkfifo(write_pipe, 0666); diff --git a/src/process2.c b/src/process2.c index ca2b3b2..861919c 100644 --- a/src/process2.c +++ b/src/process2.c @@ -54,11 +54,8 @@ struct message * processes = NULL; /** * Message queue variables */ -key_t qkey; -int qid_input; - -int qid_output1; -int qid_output2; +key_t qkey = 12356; +int qid; struct queue_message { long mtype; @@ -76,7 +73,7 @@ void notify_other_processes(int signo) { if (i != 1 && pid != 0) { msg.mtype = i+1; fprintf(stderr, "[%s] Sending message of type (%d) with value %d\n", "process1", msg.mtype, msg.signo[0]); - msgsnd(pid, &msg, sizeof(msg), 0); + msgsnd(qid, &msg, sizeof(msg), 0); fprintf(stderr, "[%s] Sending signal %s (%d) to PID: %d\n", "process2", strsignal(SIGUSR1), SIGUSR1, pid); kill(pid, SIGUSR1); } @@ -93,15 +90,13 @@ void sig_handler(int signo) fprintf(stderr, "[%s] > Notified!\n", "process2"); struct queue_message msg; /* Check queues from both other processes */ - if (msgrcv(processes->pids[0], &msg, sizeof(int), 2, 0) > 0) { + if (msgrcv(qid, &msg, sizeof(int), 2, 0) > 0) { fprintf(stderr, "[%s] > Notified with value: %s!\n", "process2", strsignal(msg.signo[0])); raise(msg.signo[0]); - break; } - else if (msgrcv(processes->pids[2], &msg, sizeof(int), 2, 0) > 0) { + else if (msgrcv(qid, &msg, sizeof(int), 2, 0) > 0) { fprintf(stderr, "[%s] > Notified with value: %s!\n", "process2", strsignal(msg.signo[0])); raise(msg.signo[0]); - break; } } else if (signo == SIGTERM) { @@ -186,11 +181,7 @@ int main(void) { /** * Register message queue to communicate with other processes */ - qkey = getpid(); - qid_input = msgget(qkey, IPC_CREAT | 0666); - - qid_output1 = msgget(processes->pids[1], IPC_CREAT | 0666); - qid_output2 = msgget(processes->pids[2], IPC_CREAT | 0666); + qid = msgget(qkey, 0666); /* Reading from process1 */ read_descriptor = open(read_pipe, O_RDONLY); diff --git a/src/process3.c b/src/process3.c index a012f4c..28ecce5 100644 --- a/src/process3.c +++ b/src/process3.c @@ -46,11 +46,8 @@ struct message * processes = NULL; /** * Message queue variables */ -key_t qkey; -int qid_input; - -int qid_output1; -int qid_output2; +key_t qkey = 12356; +int qid; struct queue_message { long mtype; @@ -68,7 +65,7 @@ void notify_other_processes(int signo) { if (i != 2 && pid != 0) { msg.mtype = i+1; fprintf(stderr, "[%s] Sending message of type (%d) with value %d\n", "process3", msg.mtype, msg.signo[0]); - msgsnd(pid, &msg, sizeof(int), 0); + msgsnd(qid, &msg, sizeof(int), 0); fprintf(stderr, "[%s] Sending signal %s (%d) to PID: %d\n", "process3", strsignal(SIGUSR1), SIGUSR1, pid); kill(pid, SIGUSR1); } @@ -80,20 +77,18 @@ void notify_other_processes(int signo) { */ void sig_handler(int signo) { - fprintf(stderr, "[%s] Received !\n", "process3"); + fprintf(stderr, "[%s] Received %s!\n", "process3", strsignal(signo)); if (signo == SIGUSR1) { fprintf(stderr, "[%s] > Notified!\n", "process3"); struct queue_message msg; /* Check queues from both other processes */ - if (msgrcv(processes->pids[0], &msg, sizeof(int), 3, 0) > 0) { + if (msgrcv(qid, &msg, sizeof(int), 3, 0) > 0) { fprintf(stderr, "[%s] > Notified with value: %s!\n", "process3", strsignal(msg.signo[0])); raise(msg.signo[0]); - break; } - else if (msgrcv(processes->pids[1], &msg, sizeof(int), 3, 0) > 0) { + else if (msgrcv(qid, &msg, sizeof(int), 3, 0) > 0) { fprintf(stderr, "[%s] > Notified with value: %s!\n", "process3", strsignal(msg.signo[0])); raise(msg.signo[0]); - break; } } else if (signo == SIGTERM) { @@ -165,11 +160,7 @@ int main(void) { /** * Register message queue to communicate with other processes */ - qkey = getpid(); - qid_input = msgget(qkey, IPC_CREAT | 0666); - - qid_output1 = msgget(processes->pids[1], IPC_CREAT | 0666); - qid_output2 = msgget(processes->pids[2], IPC_CREAT | 0666); + qid = msgget(qkey, 0666); /* Reading from process2 */ read_descriptor = open(read_pipe, O_RDONLY); -- 2.30.2