我使用IPC消息队列的静态消息大小:
/* header */
typedef struct{
long type;
char data[BUFFER_SIZE];
}msg;
/* main */
msg m;
msgrcv(queueid, &m, BUFFER_SIZE, 0, 0);
,但我需要使用动态大小的数据。就像
// header
typedef struct{
long type;
char *data;
}msg;
// main
msg m;
m.data = (char*) malloc( BUFFER_SIZE );
msgrcv(queueid, &m, BUFFER_SIZE, 0, 0);
但是当我使用它时,它不会从队列中读取任何内容,并且进程被阻塞。
谢谢你的时间,并为我的糟糕的英语道歉…
任意长度的消息像这样通过msgsnd()
和msgrcv()
传递:
typedef struct{
long type;
char data[1];
}msg;
msg * m = malloc(sizeof(msg) - 1 + NeededSize);
msgrcv(queueid, m, NeededSize, 0, 0);
... // treat m as if the data array was NeededSize elements long
free(m);
这允许您更改单个消息的needdedsize。