Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
PRECV(3PVM)			PVM Version 3.4			   PRECV(3PVM)

NAME
       pvm_precv - Receive a message directly into a buffer.

SYNOPSIS
       C    int	info = pvm_precv( int tid, int msgtag, char *buf,
				  int len, int datatype, int *atid,
				  int *atag, int *alen )

       Fortran	 call pvmfprecv( tid, msgtag, buf, len,	datatype,
			       atid, atag, alen, info )

PARAMETERS
       tid     Integer task identifier of sending process (to match).

       msgtag  Integer message tag (to match).	msgtag should be >= 0.

       buf     Pointer to a buffer to receive into.

       len     Length of buffer	(in multiple of	data type size).

       datatype
	       Type of data to which buf points	(see below).

       atid    Returns actual TID of sender.

       atag    Returns actual message tag.

       alen    Returns actual message length.

       info    Returns	PvmOk  on  success.  Values less than zero indicate an
	       error.

DESCRIPTION
       The routine pvm_precv blocks the	process	until a	message	with label ms-
       gtag has	arrived	from tid.  pvm_precv then places the contents  of  the
       message	in  the	 supplied buffer, buf, up to a maximum length of len *
       (size of	data type).

       pvm_precv can receive messages sent by pvm_psend, pvm_send,  pvm_mcast,
       or pvm_bcast.

       A  -1 in	msgtag or tid matches anything.	 This allows the user the fol-
       lowing options.	If tid = -1 and	msgtag is defined by  the  user,  then
       pvm_precv  will	accept a message from any process which	has a matching
       msgtag.	If msgtag = -1 and tid is defined by the user, then  pvm_precv
       will accept any message that is sent from process tid.  If tid =	-1 and
       msgtag =	-1, then pvm_precv will	accept any message from	any process.

       In  C the datatype parameter must be one	of the following, depending on
       the type	of data	to be unpacked:	[Version 3.3.0 - This  parameter  only
       determines  message  length,  not data conversion.  It only unpacks raw
       bytes]
	   datatype    Data Type
	   PVM_STR     string
	   PVM_BYTE    byte
	   PVM_SHORT   short
	   PVM_INT     int
	   PVM_FLOAT   real
	   PVM_CPLX    complex
	   PVM_DOUBLE  double
	   PVM_DCPLX   double complex
	   PVM_LONG    long integer
	   PVM_USHORT  unsigned	short int
	   PVM_UINT    unsigned	int
	   PVM_ULONG   unsigned	long int

       In Fortran the same data	types specified	for unpack should be used.

       The PVM model guarantees	the following about message order.  If task  1
       sends  message A	to task	2, then	task 1 sends message B to task 2, mes-
       sage A will arrive at task 2 before message B.  Moreover, if both  mes-
       sages arrive before task	2 does a receive, then a wildcard receive will
       always return message A.

       If  pvm_precv  is  successful,  info will be = 0.  If some error	occurs
       then info will be < 0.

       pvm_precv is blocking which means the routine  waits  until  a  message
       matching	 the  user specified tid and msgtag arrives at the local pvmd.
       If the message has already arrived then pvm_precv  returns  immediately
       with the	message.

       pvm_precv  does	not  affect  the  state	of the current receive message
       buffer (created by the other receive functions).

WARNINGS
       In some versions	of PVM (CM5,  I860  and	 PGON),	 messages  sent	 using
       pvm_psend  must be received only	by pvm_precv, likewise those sent with
       pvm_send	 must  be  received  by	 pvm_recv,  pvm_nrecv  or   pvm_trecv.
       pvm_psend   is	not   compatible  with	pvm_recv  (nor	pvm_send  with
       pvm_precv).   In	 addition,  pvm_probe  is   not	  interoperable	  with
       pvm_psend.

       This  problem  occurs  because nonstandard message headers are used for
       efficiency in the pvm_psend function.  In the generic Unix  version  of
       PVM, the	calls are fully	interoperable.

       The  message tag	space is shared	between	pvm_send and pvm_psend,	so you
       must be careful to avoid	selecting the wrong message  (for  example  by
       using a wildcard	to match the message).

EXAMPLES
       C:
	   info	= pvm_precv( tid, msgtag, array, cnt, PVM_FLOAT,
			     &src, &rtag, &rlen	);

       Fortran:
	   CALL	PVMFPRECV( -1, 4, BUF, CNT, REAL4,
	  >		   SRC,	RTAG, RCNT, INFO )

ERRORS
       These error conditions can be returned by pvm_precv

       PvmBadParam
	      giving an	invalid	tid, msgtag, or	datatype.

       PvmSysErr
	      pvmd not responding.

SEE ALSO
       pvm_psend(3PVM),	pvm_recv(3PVM)

				15 March, 1994			   PRECV(3PVM)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=pvmfprecv&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help