Login or Register to Ask a Question and Join Our Community


Sending a structure through a message queue


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Sending a structure through a message queue
# 1  
Old 07-09-2008
Sending a structure through a message queue

Hi,

I browsed thru the previous posts and couldnt find a solution for my problem. Hence I decided to post it.

I have a buffer array that I want to send thru a message queue. The array consists of a header structure and a payload structure memcopied to it. When I print the contents of the buffer array at the sending side it prints correctly. When I print the value at the receving side only the first structure prints correctly. The second structure has value zero for all of its elements. The code is as follows:

I have 3 file:

nwk.c - sending file

mac.c - receiving file

stub.c - message queue file

------------------------------------
Data Structure
------------------
typedef struct _PayLoad
{
UINT16 p1;
UINT32 p2;
UINT16 p3;

} PayLoad;

typedef struct
{
char type;
char category;
char r1;
char r2;
} header;

----------------------------------
nwk.c
====

int main()
{
int retVal;
PayLoad St;
St.p1 = 10;
St.p2 = 20;
St.p3 = 30;
retVal = sendData(&St);
return 0;
}

int sendData(void * data)
{
PayLoad *Pst;
connect_to_msgq();
char *buf, *tmp;
header h1;
buf = (char *)malloc(100);
tmp = buf;
h1.type = 'A';
h1.category = 'a';
memcpy(tmp, &h1, sizeof(header));
tmp = tmp + sizeof(header);
memcpy(tmp, data, sizeof(PayLoad));
Pst = (PayLoad *)tmp;
printf("Value = %d \n", Pst->p1);
printf("Value = %d \n", Pst->p2);
printf("Value = %d \n", Pst->p3);
send_to_NWK(buf);
}

-----------------------

mac.c
=====

int main()
{
connect_to_msgq();
recvData();
return 0;
}

int recvData()
{
PayLoad *Pst;
char *buf, *tmp;
buf = (char *)malloc(100);
buf = rcv_from_NWK();
tmp = buf;
//This printf works correctly
printf("tmp[0] = %c and tmp[1] = %c\n", tmp[0], tmp[1]);
tmp = tmp + sizeof(header);
Pst = (PayLoad *)tmp;
//All these printfs fail! Smilie
printf("Value of p1 = %d \n", Pst->p1);
printf("Value of p2 = %x \n", Pst->p2);
printf("Value of p2 = %x \n", Pst->p3);
}
---------------
The first printf in the mac.c prints 'A' and 'a' correctly. So the header structure has been sent correctly. But when I try to print the members of the second structure Payload, it prints 0 for all the members.

I have attached the 3 c files to the post.

I tried to avoid running to the Internet for a solution and have already spent a considerable time on this. I would really appreciate any help possible.


Thanks
# 2  
Old 07-10-2008
Better post it in the subforum for High Level Programming next door Smilie
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Ubuntu

Message Queue in Linux

Hello How can I see the created message queues in the system? (4 Replies)
Discussion started by: xyzt
4 Replies

2. Programming

UNIX Message Queue

Hello !!!!! I have a simple question but i can't find the answer anywhere hope to meet it here. Why it is a bad idea to pass pointers through message queues ? Most structs i see all of their char types are arrays... Is it becase having pointers means we could possibily send wrong bytes ? For... (2 Replies)
Discussion started by: qlyine
2 Replies

3. Programming

How to limit max no of message in a posix message queue

Hii can anyone pls tell how to limit the max no of message in a posix message queue. I have made changes in proc/sys/fs/mqueue/msg_max But still whenever i try to read the value of max. message in the queue using attr.mq_curmsgs (where struct mq_attr attr) its giving the default value as 10.... (0 Replies)
Discussion started by: mohit3884
0 Replies

4. Programming

message queue

Hello, i need to write a message queue "chat server", that should work only localy. Can anyone please help me with some ideas and peshaps code. I'm studying the UNIX IPC mechanisms right now. So far, i understand how it works but i still cannot get an idea how to write a chat programm... ... (2 Replies)
Discussion started by: etenv
2 Replies

5. Programming

Message Queue with fork() help

hi all... ive been trying this program where i spawn 4 threads... and i am trying to use message queue to send msgs from 3 of the threads to the parent thread... but it doent seem to be working... ive almost pulled out my hair tryin to fix the prob :confused: another wierd thing... (1 Reply)
Discussion started by: strider
1 Replies

6. IP Networking

message queue problem

I am sending and retriving the message to the queue the problem is after retrieving the message can i see what is there in my message queue. (actually in my application i am encountring some garbage value) so i want to retieve this garbage value and also want to know its size how... (0 Replies)
Discussion started by: ramneek
0 Replies

7. Programming

Message Queue Problem Again..

Is there any way one can delete , say , a particular message from a message queue on system V? (2 Replies)
Discussion started by: satansfury
2 Replies

8. Programming

Deleting ALL message queue

hi all, I'm working on this problem for 2 days. Can somebody tell me that how to delete all message queues from the system ? Since "ipcs -q" gives the list of all existing message queue, then there must be a system call and data stucture where from I can fetch the data about all existing... (2 Replies)
Discussion started by: v_rathor
2 Replies

9. Programming

a message queue question..

Hi there: Thanks first. When I use a message queue amony severl processes, will I have to synchronize the queue? I don't think I would have to because a message queue is implemented in a link listed. Correct me If I am wrong... (0 Replies)
Discussion started by: yanhu
0 Replies

10. UNIX for Advanced & Expert Users

Unix message Queue

Hi, I am working closly with unix message queues i have encountered the following - after creating the Q and start working with it (pushing & pulling) i receive the following stange parameters on the q's - STIME=no_entry Qnum=0 CBYTES=4140 when this happens, the Q is disabled (meaning i... (3 Replies)
Discussion started by: kel
3 Replies
Login or Register to Ask a Question

Featured Tech Videos