【问题标题】:Message queue - Dynamic message size - C消息队列 - 动态消息大小 - C
【发布时间】:2011-08-06 08:05:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: c dynamic ipc message-queue


    【解决方案1】:

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

    【讨论】:

    • @Mat:很常见,尤其是在 Windows API 中。对这些消息队列也有意义。
    • 谢谢,这就是我正在搜索的内容
    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    相关资源
    最近更新 更多