Sending messages
QNX SDP8.0Getting Started with the QNX OSDeveloperUser
Message passing on the client is achieved using some variant of the MsgSend*() function family. We'll look at the simplest member, MsgSend().
#include <sys/neutrino.h>
long MsgSend (int coid,
const void *smsg,
size_t sbytes,
void *rmsg,
size_t rbytes);
MsgSend()'s arguments are:
- the connection ID of the target server (coid),
- a pointer to the send message (smsg),
- the size of the send message (sbytes),
- a pointer to the reply message (rmsg), and
- the size of the reply message (rbytes).
It couldn't get any simpler than that!
Let's send a simple message to process ID 77,
channel ID 1:
#include <sys/neutrino.h>
char *smsg = "This is the outgoing buffer";
char rmsg [200];
int coid;
// establish a connection
coid = ConnectAttach (0, 77, 1, 0, 0);
if (coid == -1) {
fprintf (stderr, "Couldn't ConnectAttach to 0/77/1!\n");
perror (NULL);
exit (EXIT_FAILURE);
}
// send the message
if (MsgSend (coid,
smsg,
strlen (smsg) + 1,
rmsg,
sizeof (rmsg)) == -1) {
fprintf (stderr, "Error during MsgSend\n");
perror (NULL);
exit (EXIT_FAILURE);
}
if (strlen (rmsg) > 0) {
printf ("Process ID 77 returns \"%s\"\n", rmsg);
}
Let's assume that process ID 77 was an active server expecting that particular format of message on its channel ID 1. After the server received the message, it would process it and at some point reply with a result. At that point, the MsgSend() would return a 0 indicating that everything went well. If the server sends us any data in the reply, we'd print it with the last line of code (we're assuming we're getting NULL-terminated ASCII data back).
Page updated: