Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/msg.h>
- #include <sys/stat.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <stdio.h>
- #include <string.h>
- typedef struct msqid_ds {
- struct ipc_perm msg_perm; /* Ownership and permissions */
- time_t msg_stime; /* Time of last msgsnd(2) */
- time_t msg_rtime; /* Time of last msgrcv(2) */
- time_t msg_ctime; /* Time of last change */
- unsigned long __msg_cbytes; /* Current number of bytes in
- queue (nonstandard) */
- msgqnum_t msg_qnum; /* Current number of messages
- in queue */
- msglen_t msg_qbytes; /* Maximum number of bytes
- allowed in queue */
- pid_t msg_lspid; /* PID of last msgsnd(2) */
- pid_t msg_lrpid; /* PID of last msgrcv(2) */
- } msqid_ds;
- typedef struct synch //mtype = 2-3, 8, 12
- {
- long mtype;
- char synch;
- } synch;
- typedef struct Msg1
- {
- long mtype;
- int id_kolejki;
- } Msg1;
- typedef struct Msg2
- {
- long mtype;
- char synch;
- } Msg2;
- int main(int argc, char* argv[])
- {
- key_t wspolna_ping = 555;
- size_t size_ping = 100;
- int wspoldzielona_ping = shmget(wspolna_ping, size_ping, IPC_CREAT);
- char *adr_wspoldzielonej_ping = shmat(wspoldzielona_ping, 0, SHM_RND);
- int kol1, kol2, globalna_kolejka;
- key_t klucz1 = 1234;
- key_t klucz2 = 5678;
- key_t globalna = 9001;
- Msg1 id_kolejki_prywatnej1;
- Msg1 id_kolejki_prywatnej2;
- Msg2 ready1, ready2;
- msqid_ds bufor;
- globalna_kolejka = msgget(globalna, IPC_CREAT | 0777);
- kol1 = msgget(klucz1, IPC_CREAT | 0777);
- kol2 = msgget(klucz2, IPC_CREAT | 0777);
- id_kolejki_prywatnej1.id_kolejki = klucz1;
- id_kolejki_prywatnej2.id_kolejki = klucz2;
- id_kolejki_prywatnej1.mtype = 1;
- id_kolejki_prywatnej2.mtype = 1;
- if(fork!=0){
- while(1) {
- msgctl(globalna_kolejka, IPC_RMID, 0);
- usleep(250000);
- globalna_kolejka=(globalna, IPC_CREAT | 0777);
- msgsnd(globalna_kolejka, &id_kolejki_prywatnej1 , sizeof(int), 0);
- msgsnd(globalna_kolejka, &id_kolejki_prywatnej2 , sizeof(int), 0);
- msgctl(globalna_kolejka, IPC_STAT, &bufor);
- while(bufor.msg_qnum==2);
- }
- }
- else {
- adr_wspoldzielonej_ping[1] = "f";
- adr_wspoldzielonej_ping[2] = "f";
- char fail;
- synch ping;
- ping.synch = "p";
- ping.mtype = 3;
- int moja_kolejka;
- int a = fork();
- if(a==0){
- moja_kolejka = kol1;
- }
- else{
- moja_kolejka = kol2;
- }
- while(1){
- if(msgrcv(moja_kolejka, &ping, sizeof(char), 3, IPC_NOWAIT)<0){
- usleep(150000);
- if(msgrcv(moja_kolejka, &ping, sizeof(char), 3, IPC_NOWAIT)<0)
- fail = "f";
- else
- fail = "t";
- }
- else fail = "t";
- if(fail=="t") {
- msgsnd(moja_kolejka, &ping, sizeof(char), 0);
- }
- if(a==0) adr_wspoldzielonej_ping[1]=fail; //adr[1] = pingowanie 1. gracza
- else adr_wspoldzielonej_ping[2]=fail;
- if(adr_wspoldzielonej_ping[0]=="e") break; //adr[0] = koniec gry
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement