home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_09_09
/
9n09114a
< prev
next >
Wrap
Text File
|
1991-07-29
|
3KB
|
104 lines
/**********************************************************
***
*** LISTING 3
***
*** sender.c
***
*** Program to illustrate message passing under QNX.
*** Written and tested under QNX version 2.15C atp
*** Compiler used: Quantum's C compiler
***
*** This program is used to send a message to the
*** holder.c program (listing 2). It can request that
*** holder.c provide one of the following services:
***
*** 1) Store a text string that is sent to it by this
*** task.
*** 2) Reply to this task with a previously stored
*** string.
*** 3) Have holder.c commit suicide.
***
**********************************************************/
#include <stdio.h>
#include "message.h"
main(argc, argv)
int argc;
char **argv;
{
unsigned rtid; /* Variable to hold
receiving task id */
struct message buff; /* Message buffers */
/*
If an incorrect number of arguments have been passed to
this program print a command usage message and exit.
*/
if (argc != 2)
{
printf("\nUsage: sender <arg>");
printf("\n\nWhere: <arg> = t=\"text string\"");
printf("\n (stores string)");
printf("\n <arg> = -query");
printf("\n (get stored string)");
printf("\n <arg> = -kill");
printf("\n (cause holder to die)\n");
exit(-1);
}
/*
Find the task id of holder.c which will receive the
messages from this task.
*/
if(!(rtid = name_locate(HOLDER_NAME, 0, sizeof(buff))))
{
printf("\nname_locate() failed\n");
exit(-1);
}
/*
Build message to send to holder.
*/
switch ( (*argv[1] << 8) | *(argv[1] +1) )
{
case ('t' << 8) | '=' :
strcpy(buff.text, (argv[1] + 2) );
buff.mssg_type = STORE;
break;
case ('-' << 8) | 'q' :
buff.mssg_type = RETRIEVE;
break;
case ('-' << 8) | 'k' :
buff.mssg_type = KILL;
break;
default:
printf("\nUnidentified argument used.\n");
exit(-1);
}
/*
Send holder the message and print the reply if there
there is one.
*/
send(rtid, &buff, &buff, sizeof(buff) );
switch (buff.mssg_type)
{
case STORED:
printf("\nMessage stored\n");
break;
case RETRIEVED:
printf("\nRetrieved message [%s]\n",buff.text);
break;
case KILL:
printf("\nSuicide request sent to holder\n");
break;
default:
printf("\nReceived unknown message [%d].\n",
buff.mssg_type);
break;
}
}