Я пишу программу, используя очереди сообщений unix. Проблема в том, что программа сообщает мне «Ошибка: 22: недопустимые аргументы». Я сделал это, но это не удовлетворяет моему поиску. Вот простой код:Linux ipc msgsnd() failed
bool msg::send(int key, void* data)
{
(void) data;
bool res = false;
m_msgId = msgget(key, m_mask);
if (m_msgId == -1) {
// noone create it
if ((m_msgId = msgget(key, m_mask | IPC_CREAT)) == -1) {
fprintf(stderr, "Error creating message: %d:(%s)\n",
errno,
strerror(errno));
return res;
}
}
union {
msg m;
char c[sizeof(msg)];
} u = {*this}; // it`s a deep copy
// here the program fails //
int ret = msgsnd(m_msgId, u.c,
sizeof(msg), IPC_NOWAIT);
if (ret == -1) {
if (errno != EAGAIN) {
// here is errno 22 //
fprintf(stderr, "Error creating message: %d:(%s)\n",
errno,
strerror(errno));
return res;
} else {
if (msgsnd(m_msgId, u.c,
sizeof(msg), 0) == -1) {
fprintf(stderr, "Error creating message: %d:(%s)\n",
errno,
strerror(errno));
res = false;
}
}
}
res = true;
return res;
}
Если я пытаюсь отправить обычную строку типа «1234567», это нормально. Но отправка этого буфера не выполняется. Что я делаю неправильно? Спасибо.
msgsnd может потерпеть неудачу размер> MSG_MAX – pm100
мой размер 20 байт. –