一、必备知识
二、思路分析
三、代码分析
- 1、pj.c
- 2、sj.c
四、参考书籍
QQ,微信是我们早已熟悉不过的聊天软件,通过各种聊天软件,我们可以很愉快的和朋友开启聊天模式,其实,我们也可以自己制作一个聊天工具哦,下面就让我们通过消息队列的方式创建属于我们自己的聊天工具吧!
一、必备知识
- Linux基本 *** 作命令
- C语言
- 消息队列的创建及相关 *** 作
- 消息队列
二、思路分析
- 创建两个用户,一个叫佩吉,一个叫斯基
- 创建消息队列
- 创建线程
- 往消息队列发送消息
三、代码分析
1、pj.c创建两个文件,一个命名为pj.c,用于存放和佩吉相关的代码。
另外一个命名为sj.c,用于存放和斯基有关的代码。
struct msgbuf {
long type; /* message type, must be > 0 */
char data[50]; /* message data */
};
void *readMsg(void *arg)
{
int msqid = *(int *)arg;
struct msgbuf sm;
int ret;
while(1){
ret = msgrcv(msqid,&sm,sizeof(sm)-sizeof(long),1,0);
if(ret<0){
perror("msgrcv error");
exit(-1);
}
printf("斯基说:%s\n",sm.data);
}
}
int main(void)
{
//消息队列
/* key */
key_t key = ftok("xx.c",8);
if(key<0){
perror("ftok error");
exit(-1);
}
printf("key :%#x\n",key);
/* msqid */
int msqid = msgget(key,IPC_CREAT|0666);
if(msqid<0){
perror("msgget error");
exit(-1);
}
printf("msqid :%d\n",msqid);
pthread_t thread;
//创建线程
int ret = pthread_create(&thread,NULL,readMsg,&msqid);
if(ret!=0){
perror("pthread_create error");
exit(-1);
}
//分离属性
if(pthread_detach(thread)){
perror("pthread_detach error");
exit(-1);
}
/* 往消息队列中发送数据 */
struct msgbuf sm;
sm.type = 2;
while(1){
bzero(sm.data,sizeof(sm.data));
scanf("%s",sm.data);
ret = msgsnd(msqid,&sm,sizeof(sm)-sizeof(long),0);
if(ret<0){
perror("msgsnd error");
exit(-1);
}
}
return 0;
}
2、sj.c
struct msgbuf {
long type; /* message type, must be > 0 */
char data[50]; /* message data */
};
void *readMsg(void *arg)
{
int msqid = *(int *)arg;
struct msgbuf sm;
int ret;
while(1){
ret = msgrcv(msqid,&sm,sizeof(sm)-sizeof(long),2,0);
if(ret<0){
perror("msgrcv error");
exit(-1);
}
printf("佩吉说:%s\n",sm.data);
}
}
int main(void)
{
//消息队列
/* key */
key_t key = ftok("xx.c",8);
if(key<0){
perror("ftok error");
exit(-1);
}
printf("key :%#x\n",key);
/* msqid */
int msqid = msgget(key,IPC_CREAT|0666);
if(msqid<0){
perror("msgget error");
exit(-1);
}
printf("msqid :%d\n",msqid);
pthread_t thread;
//创建线程
int ret = pthread_create(&thread,NULL,readMsg,&msqid);
if(ret!=0){
perror("pthread_create error");
exit(-1);
}
//分离属性
if(pthread_detach(thread)){
perror("pthread_detach error");
exit(-1);
}
/* 往消息队列中发送数据 */
struct msgbuf sm;
sm.type = 1;
while(1){
bzero(sm.data,sizeof(sm.data));
scanf("%s",sm.data);
ret = msgsnd(msqid,&sm,sizeof(sm)-sizeof(long),0);
if(ret<0){
perror("msgsnd error");
exit(-1);
}
}
return 0;
}
四、参考书籍
刘洪涛,熊家.[嵌入式应用程序设计综合教程].北京:人民邮电出版社,2017.
刘洪涛,苗德行.[嵌入式 Linux C语言程序设计].北京:人民邮电出版社,2017
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)