![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: I need some help on Mailboxes. Process A creates a read/write mailbox with I/O channel defined in variable chanA. Process B creates a read/write mailbox with I/O channel defined in variable chanB. Process A does a sys$qio(0, chanA,IO$_WRITEVBLK, .... Process B issues a read sys$qio(efn, chanB, IO$_READVBLK what I don't understand is how Process B can read the stuff written by Process A as they both have different event flags and channle numbers !! My code works I just can't understand what is happening. The Answer is : Process event flags and process channels are process-specific constructs, and have no relation to the process event flags and the process channels used in other processes. An example of using mailboxes is available at: http://www.openvms.compaq.com/freeware/srh_examples/mbxdemo.c The OpenVMS Wizard would recommend one reader process per mailbox, with zero or more processes writing to the mailbox. This approach completely avoids the "turn-around" problems that are involved with half-duplex communications via a single mailbox. Do not use event flag zero. Allocate the required event flags using lib$get_ef or (if you are on a sufficiently recent OpenVMS version, you can use the "do not care" event flag EFN$C_ENF (defined in $EFNDEF/EFNDEF.H). Read up on $qiow and $synch. Always explicitly synchronize I/O completion -- see topic (1661) for a list of some common programming errors and various programming suggestions. Also please acquire and read the OpenVMS Programming Concepts manual -- the FAQ has a pointer to the on-line version of this manual.
|