?? 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[4]; /* message data */ };int main(){ struct msgbuf m; struct shmid_ds buf; int a[10]={0,1,2,3,4,5,6,7,8,9}; int a1[10]={0,0,0,0,0,0,0,0,0,0}; pid_t pid; key_t key; int shmid; int *p,ps,i,msgc; 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; } pid=fork(); switch(pid){ case -1: perror("fork"); return -1; case 0: memcpy(p,a,sizeof(a)); sleep(2); if((key = ftok("./",'a'))==-1) perror("key2"); if((msgc=msgget(key,IPC_CREAT|0640))==-1) perror("msgget"); m.mtype=1; strcpy(m.mtext,"bau"); if(msgsnd(msgc, &m, sizeof(m), 0)==-1){ perror("snd"); return -1; } a1[0]=getpid(); memcpy(p,a1,sizeof(a1)); while(1); break; default: while(waitpid(pid,&ps,WNOHANG)==0){ for(i=0;i<sizeof(a)/sizeof(int);i++) printf("%d ",p[i]); usleep(500000); if(msgrcv(msgc,&m,sizeof(m),0,0)==-1){ perror("msgrcv"); return -1; } printf("%s \n",m.mtext); if(strcmp(m.mtext,"bau")==0) kill(p[0],9); } printf("\n"); shmdt(p); if(shmctl(shmid,IPC_RMID,&buf)==-1){ perror("shmclt"); return -1; } }return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -