From: Rafał Długołęcki Date: Sat, 21 Jun 2014 18:05:56 +0000 (+0200) Subject: Using only one message queue. X-Git-Url: https://git.dlugolecki.net.pl/?a=commitdiff_plain;h=963f77561737c9098d160a4b1d308c71ab0fdef8;p=wsti_so.git Using only one message queue. --- 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);