信号client信号server

来源:互联网 发布:线性时不变系统 知乎 编辑:程序博客网 时间:2024/05/16 15:26
#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);}}