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

FreeBSD Manual Pages

  
 
  

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

NAME
     pvm_recvf - Redefines the comparison function used to accept messages.

SYNOPSIS
     C	  int (*old)() = pvm_recvf( int (*new)( int bufid, int tid, int tag ))

     Fortran   NOT AVAILABLE

DESCRIPTION
     The  routine  pvm_recvf  defines  the comparison function to be used by the
     pvm_recv, pvm_nrecv, and pvm_probe functions.  It is available as	a  means
     to  customize PVM message passing.  pvm_recvf sets a user supplied compari-
     son function to evaluate messages for receiving.

     recvf returns the old value of the matching function, or 0 if the old func-
     tion was the default matcher

     pvm_recvf is intended for sophisticated C programmers  who  understand  the
     function  of  such routines (like signal) and who require a receive routine
     that can match on more complex message contexts than the default provides.

MATCHING FUNCTION
     The default comparison function evaluates the source and message tag  asso-
     ciated with all incoming messages.

PARAMETERS
     tid     Integer task identifier of sending process supplied by the user.

     tag     Integer message tag supplied by the user.

     bufid   Integer message buffer identifier.

     The matching function should return:

	  Value     Action taken
	  < 0	    Return immediately with this error code.
	    0	    Do not pick this message.
	    1	    Pick this message and do not scan the rest.
	  > 1	    Pick this highest ranked message after
		    scanning them all.

EXAMPLES
     Implementing  message  probe with recvf, using our matching function to re-
     turn information in a global variable.

     #include <pvm3.h>

     static int foundit = 0;

     static int
     foo_match(mid, tid, tag)
	  int mid;
	  int tid;
	  int tag;
     {
	  int t, c;
	  struct pvmminfo header;

	  pvm_getminfo(mid, &header);

	  if ((tid == -1 || tid == header.src) && (tag == -1 || tag == header.tag))
	       foundit = 1;

	  return 0;
     }

     int
     probe(src, tag)
     {
	  int (*omatch)();
	  int cc;

	  omatch = pvm_recvf(foo_match);

	  foundit = 0;

	  if ((cc = pvm_nrecv(src, tag)) < 0)
	       return cc;

	  pvm_recvf(omatch);

	  return foundit;
     }

ERRORS
     No error conditions are returned by pvm_recvf

SEE ALSO
     pvm_bufinfo(3PVM),  pvm_getminfo(3PVM),  pvm_recv(3PVM),	pvm_nrecv(3PVM),
     pvm_probe(3PVM), pvm_trecv(3PVM)

				 30 August, 1993		     RECVF(3PVM)

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

home | help