📄 main.c
字号:
#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <stdio.h>#include <string.h>#include <sys/shm.h>#include <sys/wait.h>struct msgbuf { long mtype; /* message type, must be > 0 */ char mtext[6]; /* message data */ };int main(){ pid_t PID1,PID2,*p; int msgc; int shmid,l; key_t key,key2; struct msgbuf m; struct msgbuf m2; struct shmid_ds buf; PID1=fork(); m.mtype=1; m2.mtype=2; if((key = ftok("./",'a'))==-1){ perror("key"); return -1; } if((shmid = shmget(key,30*sizeof(int),IPC_CREAT|0640))==-1){ perror("shmget"); return -1; } if((p=(int *)shmat(shmid,NULL,0))==(void *)-1){ perror("shmat"); return -1; } if((key2 = ftok("./",'a'))==-1){ perror("key"); return -1; } if((msgc=msgget(key2,IPC_CREAT|0640))==-1){ perror("msgget"); return -1; } switch(PID1){ case -1: perror("Fork!"); return -1; case 0: //fiul citeste din coada tip1 l=strlen(m.mtext); if(msgrcv(msgc,&m,l,1,0)==-1){ perror("msgrcv fiu"); return -1; } printf("%s \n",m.mtext); //fiul trimite in shm ID-ul PID2=getpid(); *p=PID2; //memcpy(p,PID2,sizeof(PID2)); //fiul trimite in coada tip2 strcpy(m2.mtext,"bun");l=strlen(m2.mtext); if(msgsnd(msgc, &m2, l+1, 0)==-1){ perror("snd"); return -1; } break; default: //tata scrie in coada tip1 strcpy(m.mtext,"bau");l=strlen(m.mtext); if(msgsnd(msgc, &m, l+1, 0)==-1){ perror("snd"); return -1; } //tata citeste din coada tip2 l=strlen(m2.mtext); if(msgrcv(msgc,&m2,l,2,0)==-1){ perror("msgrcv tata"); return -1; } printf("%s %d \n",m2.mtext,strlen(m2.mtext)); //tata citeste din shm ID-ul si il killereshte kill(*p,9); printf("Program killarit!\n"); break; }return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -