[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Trying to understand Mach IPC
From: |
Manu Valderrama |
Subject: |
Re: Trying to understand Mach IPC |
Date: |
Mon, 10 Jun 2002 16:31:43 +0200 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020529 |
Manuel Menal wrote:
Sun, 09 Jun 2002 22:56:35 +0200, you wrote:
> Hello! I would need some help with Mach IPC ( without using MIG, only the
> syscalls for IPC ); I was writing
> some example programs with the purpose to learn about Mach IPC, and now I'm
> blocked and don't know
> how to continue. I hope that somewhat could help me in this mailing list.
That is probably a good place to ask help. :-)
Thanks for your answer, it has been somewhat useful ;-) , but not
completly, :-( !!
> the gnumach reference manuals, and "A
> programmer's guide to the mach
> system calls", that treats about mach 2.5 IPC wo MIG;
Never heard of that book. Is it still published?
You can obtain it from here :
http://www-2.cs.cmu.edu/afs/cs/project/mach/public/www/doc/tutorials.html
I've tried to update the code with the description of the mach_msg
function, and
the mach_msg_header_t and mach_msg_type_t structures described in the
kernel interfaces
document that you have mencioned.
That seems the right way to me. At least, the idea is correct. Not sure
you filled the right fields with the correct values, though ;-)
Yes, that's my problem!
Just before I try to see what's wrong with your code: could you please
use the GNU Coding Standards[1] ? That would make your code so easier :).
Sorry!!... it was a little example written for learning purposes; I have
changed the code again, but I still
didn't adhere to GNU coding standards, since I had not enoungh time in
this lunch time break!
Don't worry, I'll follow your advices. Thanks ;-) !
> /* Header of the message : */
> my_message.head.msgh_size = sizeof(struct simple_message);
> /* my_message.head.msgh_local_port = mach_task_self(); */
> my_message.head.msgh_local_port = MACH_PORT_NULL;
> my_message.head.msgh_remote_port = my_port;
> /* my_message.head.msgh_id = 0x1234; */
You must fill some other fields too. msgh_bits _must_ be filled with the
appropriate value. You should read « Mach 3 Kernel Interfaces » [2],
page 327.
Aha! I have made some changes to the original program with the purpose
of obtaining what is the error that happens :
/* OK, time to send the message : */
err = mach_msg( &(my_message.head), MACH_SEND_MSG, my_message.head.msgh_size,
0, MACH_PORT_NULL,
MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL );
/* Error analysis : */
if( err == MACH_MSG_SUCCESS )
printf( "Success : the message was queued\n" );
else if( err == MACH_SEND_MSG_TOO_SMALL )
printf( "Error : send_size smaller than the minimum\n" );
else if( err == MACH_SEND_NO_BUFFER )
printf( "Error : there was some resource shortage on the system\n" );
else if( err == MACH_SEND_INVALID_DATA )
printf( "Error : buffer message not readable\n" );
else if( err == MACH_SEND_INVALID_HEADER )
printf( "Error : msgh_bits value is invalid\n" );
else
printf( "Error : code returned is %d\n", err );
and, as you have pointed, I get a "MACH_SEND_INVALID_HEADER" error code!
I have tried some few things to fill this msgh_bits field correctly, but
I'm afraid
that I'm still not prepared; some help will be apreciated, but maybe it
would be
more interesting that me by-myself try todiscover how to fill correctly
this field.
Oh, and. Your example looks like the one described in
http://web.walfield.org/pub/people/neal/papers/hurd-misc/mach-ipc-without-mig.txt,
except that it has no threads. You should have a look at it, it has good
explainations, and good references. Don't look at the solution, that
would be cheating! :-)
Bye,
Of course I'm trying to solve that problem, but I decided to go step by
step. Then in my first
tries there are no threads created.
I'm thinking that maybe another source of problems would come because
the program has no rights to send a message to the port I have already
created....
but no idea!, I'm just a newbie in Mach Programming!
[1]: http://www.gnu.org/prep/standards_toc.html
[2]: http://www-2.cs.cmu.edu/afs/cs/project/mach/public/www/doc/osf.html
This time better no to torture nobody sending the source of my programs;
anyway I have no made many changes!
Thanks for the Help!
- Trying to understand Mach IPC, Manu Valderrama, 2002/06/09
- Re: Trying to understand Mach IPC, Manuel Menal, 2002/06/10
- Re: Trying to understand Mach IPC,
Manu Valderrama <=
- Message not available
- Re: Trying to.... It's amazing and it works!, Manu Valderrama, 2002/06/10
- Re: Trying to.... It's amazing and it works!, Manuel Menal, 2002/06/11
- Re: Trying to.... It's amazing and it works!, Manu Valderrama, 2002/06/11
- Re: Trying to.... It's amazing and it works!, Thomas Bushnell, BSG, 2002/06/11
- Re: Trying to.... It's amazing and it works!, Manu Valderrama, 2002/06/12
- Message not available
- Re: Trying to.... It's amazing and it works!, Manu Valderrama, 2002/06/12