如何解决邮件队列-动态邮件大小-C
| 我正在为IPC消息队列使用静态消息大小:/* header */
typedef struct{
long type;
char data[BUFFER_SIZE];
}msg;
/* main */
msg m;
msgrcv(queueid,&m,BUFFER_SIZE,0);
但是我需要使用动态数据大小。就像是
// header
typedef struct{
long type;
char *data;
}msg;
// main
msg m;
m.data = (char*) malloc( BUFFER_SIZE );
msgrcv(queueid,0);
但是,当我使用它时,它不会从队列中读取任何内容,并且进程被阻止。
感谢您的宝贵时间,并为我的英语不好而道歉。
解决方法
任意长度的消息通过
msgsnd()
和msgrcv()
传递,如下所示:
typedef struct{
long type;
char data[1];
}msg;
msg * m = malloc(sizeof(msg) - 1 + NeededSize);
msgrcv(queueid,m,NeededSize,0);
... // treat m as if the data array was NeededSize elements long
free(m);
这使您可以更改个别消息的NeededSize。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。