Ich schreibe ein Programm mit Unix-Nachrichtenwarteschlangen. Das Problem ist das, das Programm meldet mir "Fehler: 22: ungültige Argumente". Ich habe gepumpt, aber es befriedigt meine Suche nicht. Hier ist der einfache Code:Linux ipc msgsnd() schlägt fehl
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;
}
Wenn ich versuche, eine normale Zeichenfolge wie "1234567" zu senden, ist es in Ordnung. Aber dieses Senden des Puffers schlägt fehl. Was mache ich falsch? Danke.
msgsnd fehlschlagen kann, ist Größe> MSG_MAX – pm100
meine Größe ist 20 Bytes. –