#include <sys/ipc.h>#include <sys/msg.h>#include<stdio.h>#include<stdlib.h>#include <string.h>#include<sys/types.h>#include<signal.h>#define MSG_KEY 888#define PERMS 0666|IPC_CREAT#define N 20#define SERVER_TYPE 1L#define CLIENT_TYPE 2Ltypedef struct { long mtype; char mtext[N];}msgbuf;void int2(){ exit(0);}int main(){ int msgid; msgbuf msgbuf; msgid =msgget(MSG_KEY,PERMS); pid_t pid; if( -1 == msgid ){perror("msgget error");exit(1);}pid=fork();if(pid>0){while(1){ memset(&msgbuf,0,sizeof(msgbuf)); msgbuf.mtype = CLIENT_TYPE;fgets(msgbuf.mtext,N,stdin);if( msgsnd( msgid,&msgbuf,N,0 ) < 0){perror("msgsnd error");exit(1);}if (strncmp(msgbuf.mtext,"exit",4)==0){printf("client will quit\n");kill(pid,10);waitpid(pid,NULL,0);exit(0);}}}else if(pid==0) {while(1){ signal(SIGUSR1,int2);memset(&msgbuf,0,sizeof(msgbuf));if( msgrcv(msgid,&msgbuf,N,SERVER_TYPE,0) < 0){perror("msgrcv error");exit(1);}printf("server : %s",msgbuf.mtext);}}else {perror("fork error");exit(1);} }
#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include<signal.h>#define MSG_KEY 888#define PERMS 0666|IPC_CREAT#define N 20#define SERVER_TYPE 1L#define CLIENT_TYPE 2Lstruct msgbuf{long mtype;char mtext[N];};void int1(){ exit(0);}int main(){int msgid;pid_t pid;struct msgbuf msgbuf;msgid = msgget(MSG_KEY,PERMS);if( -1 == msgid ){perror("msgget error");exit(1);}pid = fork();if( pid > 0 ){while(1){memset(&msgbuf,0,sizeof(msgbuf));msgbuf.mtype = SERVER_TYPE;fgets(msgbuf.mtext,N,stdin);if( msgsnd( msgid,&msgbuf,N,0 ) < 0){perror("msgsnd error");exit(1);}if (strncmp(msgbuf.mtext,"exit",4)==0){ printf("server will quit\n"); kill(pid,10);waitpid(pid,NULL,0);exit(0);}}}else if( pid == 0 ){while(1){ signal(SIGUSR1,int1);memset(&msgbuf,0,sizeof(msgbuf));if( msgrcv(msgid,&msgbuf,N,CLIENT_TYPE,0) < 0){perror("msgrcv error");exit(1);}printf("client : %s",msgbuf.mtext);}}else{perror("fork error");exit(1);}}