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

发布于 2024-11-01 08:55:25 字数 493 浏览 8 评论 0原文

我对 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);

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

感谢您的宝贵时间,并为我糟糕的英语道歉......

I'm using static message size for a IPC message queue:

/* header */
typedef struct{  
    long type;  
    char data[BUFFER_SIZE];
}msg;

/* main */
msg m;
msgrcv(queueid, &m, BUFFER_SIZE, 0, 0);

but I need to use dynamic size of data. Something like

// header
typedef struct{  
    long type;  
    char *data;
}msg;

// main
msg m;
m.data = (char*) malloc( BUFFER_SIZE );
msgrcv(queueid, &m, BUFFER_SIZE, 0, 0);

But when I use that it doesn't read anything from the queue and the process is blocked.

Thanks for your time, and apologize for my poor english...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静若繁花 2024-11-08 08:55:25

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

Arbitrary length messages are passed through msgsnd() and msgrcv() like this:

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);

This allows you to vary what NeededSize is for individual messages.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文