您好,登錄后才能下訂單哦!
注意事項(xiàng):
linux(2.4.22)限制:
key_t ftok(char* path,int id)使用說明:
其它的注意就查看一下unix高級(jí)環(huán)境編程吧,或者有些問題需要討論就回我吧!!
server.c
- #include "msg.h"
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int main(int argc, char** argv)
- {
- int queid = open_msg("/root",100);
- while(1)
- {
- fputs("請(qǐng)輸入要發(fā)送的類型:1 or 2\n", stdout);
- int type;
- scanf("%d",&type);
- switch(type)
- {
- case MYTYPE_ONE:
- {
- msg_send(queid,"MYTYPE_ONE", MYTYPE_ONE);
- break;
- }
- case MYTYPE_TWO:
- {
- msg_send(queid,"MYTYPE_TWO", MYTYPE_TWO);
- break;
- }
- default:
- {
- fputs("輸入類型錯(cuò)誤,請(qǐng)重新輸入\n",stdout);
- break;
- }
- }
- fputs("輸入:q 為退出,其它表示繼續(xù)\n",stdout);
- if(getchar() == 'q')
- {
- fputs("退出成功!\n",stdout);
- break;
- }
- else
- {
- fputs("繼續(xù)發(fā)送消息\n",stdout);
- }
- }
- //不發(fā)送退出需要獎(jiǎng)隊(duì)列移除
- del_que(queid);
- return 0;
- }
client.c
- #include "msg.h"
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int main(int argc, char** argv)
- {
- int queid = open_msg("/root",100);
- while(1)
- {
- fputs("請(qǐng)接收要發(fā)送的類型:1 or 2\n", stdout);
- int type;
- scanf("%d",&type);
- switch(type)
- {
- case MYTYPE_ONE:
- {
- msg_rec(queid,MYTYPE_ONE);
- break;
- }
- case MYTYPE_TWO:
- {
- msg_rec(queid,MYTYPE_TWO);
- break;
- }
- default:
- {
- fputs("輸入類型錯(cuò)誤,請(qǐng)重新輸入\n",stdout);
- break;
- }
- }
- fputs("輸入:q 為退出,其它表示繼續(xù)\n",stdout);
- if(getchar() == 'q')
- {
- fputs("退出成功!\n",stdout);
- break;
- }
- else
- {
- fputs("繼續(xù)發(fā)送消息\n",stdout);
- }
- }
- //隊(duì)列移除
- del_que(queid);
- return 0;
- }
msg.c
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/ipc.h>
- #include <sys/msg.h>
- #include<string.h>
- #include"msg.h"
- //如果存在隊(duì)列則打開,沒有則創(chuàng)建
- int open_msg(char* path, int id)
- {
- //獲取IPC對(duì)象的一個(gè)鍵
- key_t key = ftok(path, id);
- if(-1 == key)
- {
- perror("ftok\n");
- exit(1);
- }
- //創(chuàng)建一個(gè)隊(duì)列
- int queid = msgget(key, IPC_CREAT|0666);
- if(-1 == queid)
- {
- perror("msgget\n");
- exit(1);
- }
- return queid;
- }
- //發(fā)送消息到隊(duì)列
- void msg_send(key_t key,char* text, long msgtype)
- {
- //初始化內(nèi)容
- struct MSG tmp;
- memset(&tmp,sizeof(struct MSG),0);
- tmp.mytype = msgtype;
- strcpy(tmp.mytext,text);
- //發(fā)送消息
- if(msgsnd(key, &tmp, TEXTSIZE, 0))
- {
- perror("msgsnd\n");
- exit(1);
- }
- }
- //從消息隊(duì)列獲取消息并顯示
- void msg_rec(key_t key,long msgtype)
- {
- struct MSG tmp;
- if(-1 == msgrcv(key, &tmp, TEXTSIZE, msgtype, MSG_NOERROR))
- {
- perror("msgrcv\n");
- exit(1);
- }
- printf("receive content: %s\n",tmp.mytext);
- }
- //刪除隊(duì)列,即使隊(duì)列里面還有消息也一起刪除
- void del_que(key_t key)
- {
- if(msgctl(key,IPC_RMID,NULL))
- {
- perror("msgsnd\n");
- exit(1);
- }
- }
msg.h
- #ifndef MSG_H
- #define MSG_H
- #include <sys/types.h>
- #define TEXTSIZE 100
- #define ARRYSIZE 2
- #define MYTYPE_ONE 1
- #define MYTYPE_TWO 2
- struct MSG
- {
- long mytype;
- char mytext[TEXTSIZE];
- };
- int open_msg(char*,int);
- void msg_send(key_t,char*,long);
- #endif // end MSG_H
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。