?? 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 + -