⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 posmsg.c

📁 一个串口通讯的c语言的例子
💻 C
字号:
// 消息队列操作
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <stdio.h>

#define MSGKEY 34856
#define MSQSIZE 1024

/*** 以下是数据类型的定义***/
#ifndef u_char
	#define u_char unsigned char
#endif
typedef	unsigned char uchar;

struct msgform{
	long mtype;
	u_char mtext[MSQSIZE];
	int mlength;
};

//创建消息队列
// 参数:
//		flag=0777|IPC_CREAT for server
//		flag=0777		   for client
// 返回:消息队列的ID 为成功		-1 为失败
int createmsg(int flag){
	key_t key;
	int msqid;

	key=MSGKEY;

	if(key<0){
		perror("ftok error");
		return -1;
	}else{
		msqid=msgget(key,flag);					// 建成队列
		return msqid;
	}
}

//发送数据包到系统消息队列
// 参数:
//		sndData:	发送的数据
//		len:		数据长度
//		msqid:		消息队列的ID
//		type:		消息队列的类型
//			 = 0:	接收消息队列中的第一个报文
//			 > 0:	接收消息队列中的类型为msgqtype的第一个报文
//			 < 0:	接收消息队列中小于等于msgqtype绝对值的最低类型的第一个报文
// 返回:0 为成功		-1 为失败
int sendmsgs(u_char *sndData,int len,int msqid,int type){
	struct msgform msg;
	int i;

	msg.mtype = type;
	msg.mlength = len;
	memcpy(msg.mtext,sndData,len);
	
//	for(i=0;i<len;i++)
//		printf("[%02x]",msg.mtext[i]);

	if(msgsnd(msqid,&msg,len,0)==0){			// 发消息 (len 不能超过2048)
//		printf("\nSend data ok!\n");
		return 0;
	}else{
//		printf("\nSend data failed!\n");
		return -1;
	}
}

//接收数据包从系统消息队列
// 参数:
//		rcvData:	接收的数据
//		msqid:		消息队列的ID
//		type:		消息队列的类型
//			 = 0:	接收消息队列中的第一个报文
//			 > 0:	接收消息队列中的类型为msgqtype的第一个报文
//			 < 0:	接收消息队列中小于等于msgqtype绝对值的最低类型的第一个报文
// 返回:0 为成功		-1 为失败
int receivemsg(u_char *rcvData,int msqid,int type){
	int len,i;
	struct msgform msg;

	len=msgrcv(msqid,&msg,MSQSIZE,type,0);		// 收消息

//	for(i=0;i<len;i++)
//		printf("[%02x]",msg.mtext[i]);
//	printf("\nReceive data length=%d\n",len);

	memcpy(rcvData,msg.mtext,len);
	return len;
}

//删除系统消息队列
// 参数:
//		msqid:		消息队列的ID
// 返回:0 为成功		-1 为失败
int delmsg(int msqid){
	if(msgctl(msqid,IPC_RMID,(struct msqid_ds *)0) < 0){
		perror("msgctl");
		return -1;
	}
	printf("message succeed remove!\n");	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -