📄 client1.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 client2:"); 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 = 2 ; if( (msgsnd(qid,&msg,BUFSZ,0)) <0 ) { perror("message posted!\n"); exit(1); } sleep(1); kill(getppid(),SIGINT); exit(1); } else { msg.msg_type = 2 ; //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,1,0) <0 ) { perror("msgrcv"); exit(1); } j=strcmp(msg.msg_text,"quit\n"); if(j==0) { printf("Client2 exit!\n"); printf("Exit in 1 second!\n"); sleep(1); exit(1); } else { printf("Receive message from client2:%s\n",(&msg)->msg_text); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -