1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
int main()
{
struct mq_attr attr;
mqd_t mq;
attr.mq_maxmsg = 20;
attr.mq_msgsize = 64;
attr.mq_flags = 0;
attr.mq_curmsgs = 0;
mq = mq_open("/ma_queue", (O_RDWR | O_CREAT | O_NONBLOCK), 00666, &attr);
memset(&attr, 0, sizeof(attr));
mq_getattr(mq, &attr);
string buf = "TEST TRANSFER";
mq_send(mq, buf.c_str(), attr.mq_msgsize, 0);
mq_send(mq, "TEST 2 OMG", (sizeof(char)*64), 0);
mq_send(mq, "TEST 3 OMFG", (sizeof(char)*64), 0);
int rc, i;
rc = fork();
if (rc == 0)
{
cout << "debut du fils" << endl;
execv("/home/baradhur/test/thread/thread", NULL);
}
else
{
fd_set read;
FD_ZERO(&read);
FD_SET(mq, &read);
std::cout << "juste avant le select" << std::endl;
select (mq, &read, NULL, NULL, NULL);
wait(&i);
std::cout << "juste apres le wait" << std::endl;
char *buffer = new char[64];
mq_receive(mq, buffer, 64, NULL);
perror("mq_receive apres select");
cout << "recu de elsewhere : " << buffer << endl;
}
} |
Partager