消息队列 - 动态消息大小 - C.

时间:2011-04-15 13:03:19

标签: c dynamic ipc message-queue

我正在为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);

但是当我使用它时,它不会从队列中读取任何内容并且进程被阻止。

感谢您的时间,并为我可怜的英语道歉...

1 个答案:

答案 0 :(得分:2)

任意长度的消息通过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);

这允许您改变各个消息的NeededSize。