【发布时间】:2015-02-15 09:19:08
【问题描述】:
处理具有不同大小信号的 Linux 消息队列(POSIX 或 SysV)的信号的最佳方法是什么?
假设我有一个进程可以接收两个或多个不同大小的不同信号。例如:
struct sig1 {
long mType;
char data[10];
};
struct sig2 {
long mType;
char data[20000];
};
现在,据我了解消息队列 API,为了接收这些信号,我需要确保我可以为数据提供一个缓冲区,该缓冲区至少等于消息队列中传递的最大消息的大小.
int msgrcv(int msqid, void *msgp, size_t msgsz,
long msgtyp, int msgflg);
对我来说,需要为收到的每个信号分配一个与队列中传递的最大消息一样大的新缓冲区似乎是不切实际的。或者有什么方法可以在将消息从队列中取出之前轮询队列以了解消息的大小?现在,在我上面提供的极端情况下,我需要为每个接收到的信号分配 20000 个字节,即使接收到 sig1 时,只有 10 个字节就足够了。
假设我有一个信号负载高且信号大小差异很大的应用程序。有没有好办法处理这种情况?另外,从性能的角度来看,我是否会因为需要为每次接收分配更大的缓冲区而损失性能?
【问题讨论】:
标签: c++ linux message-queue