Sponsored Content
Full Discussion: C Posix - msgsnd() msgrcv
Top Forums Programming C Posix - msgsnd() msgrcv Post 302285001 by carl33p on Friday 6th of February 2009 06:21:10 PM
Old 02-06-2009
C Posix - msgsnd() msgrcv

Hey guys, Im doing message passing for the first time on a linux OS. Im new to C programming, so bear with me. I made two .c files : central.c and external.c

I simply wanted to pass a message from the central process to the external process. BUT Whenever each process gets to the msgsnd()/msgrcv() method the processes stall there. In the command line I start both processes with:
Code:
./central 60 & ./external 1 60

central.c
Code:
#include <stdio.h> 
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/msg.h>

typedef struct mymsg{
 long priority;
 int temp;
 int pid;
 int stable;
}msgp;

int main(int argc, char *argv[])
{
 msgp msgp;
 msgp.priority=2;
 msgp.temp=(int) argv[1];
 msgp.pid=70;
 msgp.stable=0;

//Create central mailbox
 int stat, msqid;
 if ((msqid = msgget(0070, 0666 | IPC_CREAT)) < 0) {
   perror("msgget");
   return 1;
 }
 else 
   (void) fprintf(stderr,"Central msgget: msgget succeeded: msqid = %d\n", msqid);

//Send message to external processes
 stat = msgsnd(msqid, &msgp, sizeof(msgp) - sizeof(long), 0);
 if ( stat < 0) {
    printf ("Insert details of message sent");
    perror("msgsnd");
    return 1;
 }
 else {
   printf("Central successfully sent the Message");
 }

 //temp=(2*temp+exTemps)/6;
 return 0;

}

external.c
Code:
#include <stdio.h> 
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/msg.h>

typedef struct my_msg{
 long priority;
 int temp;
 int pid;
 int stable;
}msgp;

int main(int argc, char *argv[])
{
 msgp msgp;
 msgp.priority=2;
 msgp.temp=(int) argv[1];
 msgp.pid=(int) argv[2];
 msgp.stable=0;

 int msqid, stat;

//Create external mailbox
 if ((msqid = msgget(0070, 0666 | IPC_CREAT)) < 0) {
   perror("msgget");
   return 1;
 }
 else 
   (void) fprintf(stderr,"External msgget: msgget succeeded: msqid = %d\n", msqid);

//Wait to receive message
 stat = msgrcv(msqid, &msgp, sizeof(msgp)-sizeof(long), 2, 0);
 if (stat < 0) {
    printf ("Insert details of attempted received message");
    perror("msgrcv");
    exit(1);
 }
 else {
   printf("External successfully received the Message");
 }

 return 0;

}

Any comments or help would be much appreciated!Smilie

Last edited by carl33p; 02-06-2009 at 09:16 PM..
 

10 More Discussions You Might Find Interesting

1. Programming

msgrcv pending forever !!!

When I am using msgrcv to get a message from a queue, in case of msgsnd some error, the msgrcv thread will waiting forever. Is there some way that I can specify a time out value for this queue ? just let msgrcv wait for some time, if no message comes during this time slot, msgrcv just return... (3 Replies)
Discussion started by: Yun Gang Chen
3 Replies

2. UNIX for Dummies Questions & Answers

msgrcv : Invalid argument

Hi All, Please guide me how to get rid : msgrcv : Invalid argument. I am using message queues: msgsnd and msgrcv, I am able to send through msgsnd and receive through msgrcv, but at times i get the belo error. msgrcv : Invalid argument. (1 Reply)
Discussion started by: answers
1 Replies

3. AIX

msgrcv crash in AIX 5.3 SP6

Hi All, I have a piece of code like blow. It is working fine with AIX 5.3 SP3. When the same thing is getting executed in AIX 5. SP6 it is giving segmentation fault. If I put debug statements before and after, it works fine. rc = msgrcv(mqid, &msg, size, HIGH_PRIORITY_FIRST , 0) ... (0 Replies)
Discussion started by: sandhya_chp
0 Replies

4. Programming

Posix

HI, When i am configuring php in SUN Solaris. I am getting the below error. configure: error: Your system seems to lack POSIX threads. Do i need to install POSIX? If so can somebody let me know where can i download POSIX for Solaris 8? Thanks, (2 Replies)
Discussion started by: Krrishv
2 Replies

5. UNIX for Advanced & Expert Users

Posix threads

Hi, consider the code below: #include <stdio.h> . . struct myStruct { char *message ; int id; }; . . . void *thread_function( void *ptr ); nt main() { pthread_t thread1, thread2 ,thread3 ; struct myStruct nico1; (2 Replies)
Discussion started by: Behnaz
2 Replies

6. What is on Your Mind?

Linux posix

Hi everybody, i couldn't think of any better place to ask this question. Does LINUX totally confirm with ALL of the POSIX standards??. If not which areas does it diverge?? my apologies if this questions seems sooo stupid to some of you.. thanks (0 Replies)
Discussion started by: abhiram7
0 Replies

7. UNIX for Dummies Questions & Answers

IPC Message Queue. msgrcv doesnt work..

Hi everybody, this is the situation. there is a programm XYZ which opens a message queue with the key 47110815 and waits for a SIGUSR1. After receiving this signal it sends a message with type 100 and a number (as ASCII) in the message-body. I have to write a prog which frist sends the... (1 Reply)
Discussion started by: daredevil82m
1 Replies

8. UNIX for Advanced & Expert Users

System V or POSIX

Hi , I am using UNIX network programming Vol1 (by R Stevens) book to learn about IPC. I would be using HP-UX,Solaris and Linux at my work. I have sections for POSIX and for System V in that book. I am quite confused in indentifying those OSs as POSIX or SYstem V. Can anyone please... (1 Reply)
Discussion started by: kumaran_5555
1 Replies

9. Programming

POSIX Thread Help

I want to create a program that creates 2 child process, and each of them creates 2 threads, and each thread prints its thread id. I0ve allread done that the outuput isn't the outuput i want. When a run the following comand "$./a.out | sort -u | wc -l" I have the folowing output 2 $: It should... (3 Replies)
Discussion started by: pharaoh
3 Replies

10. Programming

Message queue is not blocked in msgsnd

Hi, I am trying to send/receive data by message queue and expecting it to be blocked on send/read for other side (at least this is my understooding ) , I am connecting message between perl<->C , perl is working as expected , but in C msgsnd and msgrcv are not waiting (blocked) untill second side... (6 Replies)
Discussion started by: alexse
6 Replies
msg.h(3HEAD)							      Headers							      msg.h(3HEAD)

NAME
msg.h, msg - message queue structures SYNOPSIS
#include <sys/msg.h> DESCRIPTION
The <sys/msg.h> header defines the following data types through typedef: msgqnum_t used for the number of messages in the message queue msglen_t used for the number of bytes allowed in the message queue These types are unsigned integer types that are able to store values at least as large as a type unsigned short. The <sys/msg.h> header defines the following constant as a message operation flag: MSG_NOERROR no error if big message The msqid_ds structure contains the following members: struct ipc_perm msg_perm Operation permission structure. msgqnum_t msg_qnum Number of messages currently on queue. msglen_t msg_qbytes Maximum number of bytes allowed on queue. pid_t msg_lspid Process ID of last msgsnd(2). pid_t msg_lrpid Process ID of last msgrcv(2). time_t msg_stime Time of last msgsnd(). time_t msg_rtime Time of last msgrcv(). time_t msg_ctime Time of last change. The pid_t, time_t, key_t, size_t, and ssize_t types are defined as described in <sys/types.h>. See types(3HEAD). ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Standard | +-----------------------------+-----------------------------+ SEE ALSO
msgctl(2), msgget(2), msgrcv(2), msgsnd(2), ipc.h(3HEAD), types.h(3HEAD), attributes(5), standards(5) SunOS 5.11 10 Sep 2004 msg.h(3HEAD)
All times are GMT -4. The time now is 12:40 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy