C int info = pvm_pkmesg( int bufid )
int info = pvm_pkmesgbody( int bufid )
int newbufid = pvm_upkmesg( )
Fortran call pvmfpkmesg( bufid, info ) call pvmfpkmesgbody( bufid, info ) call pvmfupkmesg( bufid, newbufid )
pvm_pkmesg packs the specified message into the current send buffer. The entire body of the message is packed, along with header attributes:
length context tag message tag wait identifier encoding checksum source and destination addressesThe buffer specified must not be the same as the current send buffer. Multiple messages can be packed into a single message, and packed messages can be mixed with any other data types.
pvm_upkmesg unpacks a message from the current receive buffer, allocating a new message buffer for it. The body of the newly created message, and header attributes listed above, match the one originally packed using pvm_pkmesg.
pvm_pkmesgbody is similar to pvm_pkmesg, but packs only the body of the specified message, omitting the header fields. In other words, it splices the messages together (the included message is left unaltered). When calling pvm_pkmesgbody, the encoding types of the two messages must match because the included message body is simply appended to the send buffer. Calls to pvm_pkmesgbody can be mixed with calls to pack any other data types.
Note: pvm_upkmesgbody doesn't exist, because PVM doesn't keep track of the boundary between the two messages.
pvm_recv(-1, -1); pvm_initsend(PvmDataDefault); pvm_pkstr("here is the message I received..."); pvm_pkmesg(pvm_getrbuf());