📄 client2.c
字号:
#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <unistd.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <signal.h>#define BUFSZ 512struct message{ long msg_type; char msg_text[BUFSZ];};int main(){ int i,j; pid_t pid; int qid; key_t key; int len; struct message msg; /*根据不同的路径和关键表示产生标准的key*/ if ( (key=ftok(".",'a')) == -1 ) { perror("ftok"); exit(1); } /*创建消息队列*/ if( (qid=msgget(key,IPC_CREAT|0666)) == -1 ) { perror("msgget"); exit(1); } printf("opened queue %d\n",qid); if( (pid=fork()) == -1 ) { perror("fork"); exit(-1); } if(pid==0) { puts("Please enter the message to client1:"); while(1) { if( (fgets( (&msg)->msg_text,BUFSZ,stdin)) == NULL ) { puts("no message!\n"); exit(1); } i = strcmp(msg.msg_text,"quit\n"); if ( i == 0 ) { msg.msg_type = 1 ; if( (msgsnd(qid,&msg,BUFSZ,0)) <0 ) { perror("message posted!\n"); exit(1); } sleep(1); kill(getppid(),SIGINT); exit(1); } else { msg.msg_type = 1 ; len = strlen(msg.msg_text); /*添加消息到消息队列*/ if( (msgsnd(qid,&msg,BUFSZ,0)) <0 ) { perror("message posted!\n"); exit(1); } sleep(1); } } } else { while(1) { if(msgrcv(qid,&msg,BUFSZ,2,0) <0 ) { perror("msgrcv"); exit(1); } j = strcmp(msg.msg_text,"quit\n"); if( j == 0 ) { printf("Client1 exit!\n"); printf("Exit in 1 second!\n"); sleep(1); exit(1); } else printf("Receive message from client1:%s\n",(&msg)->msg_text); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -