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

FreeBSD Manual Pages

  
 
  

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

NAME
       pvm_getfds - Get	file descriptors in use	by PVM.

SYNOPSIS
       C    int	nfds = pvm_getfds( int **fds )

       Fortran	 Not Available

PARAMETERS
       fds     Returns integer array of	file descriptors.

DESCRIPTION
       A  PVM  task uses sockets to communicate	between	libpvm and other tasks
       or the pvmd.  It	is sometimes useful to know the	file  descriptor  num-
       bers  of	 the  sockets in order to wait from input from either PVM mes-
       sages or	an external source.  For example, the  PVM  console  waits  on
       both  keyboard  input and notify	messages.  Input can be	multiplexed by
       polling all sources, but	this wastes cpu	cycles.	 Instead, the select()
       system call can be used to wait until one or more sources of input  are
       ready.

       If  it completes	successfully, pvm_getfds returns the number of sockets
       in use, and the file descriptor numbers	in  an	array  (allocated  and
       freed  by  libpvm).   At	 least	one socket always exists (from task to
       pvmd), and its descriptor is always  fds[0].   The  number  of  sockets
       varies as direct	routes are established to other	tasks.

       It  can	be  difficult  to  track the set of file descriptors if	direct
       routing is enabled, because routes are created as messages  are	either
       sent or received.  The simplest approach	is to disable direct routing.

       When  select  returns with a PVM	file descriptor	ready, a complete mes-
       sage may	be ready to be received, or instead only  a  fragment  may  be
       waiting.	 pvm_nrecv or pvm_probe	should be used test without blocking.

RESTRICTIONS
       pvm_getfds is only available when running PVM on	a Unix or similar sys-
       tem.

EXAMPLES
       The  following  program	fragment  waits	until either keyboard input is
       available, or a PVM message has arrived.

	    int	*d;
	    fd_set r;

	    pvm_setopt(PvmRoute, PvmDontRoute);
	    pvm_getfds(&d);

	    FD_ZERO(&r);
	    FD_SET(0, &r);
	    FD_SET(d[0], &r);
	    while (1) {
		 if (select(d[0] + 1, &r, (fd_set*)0, (fd_set*)0,
			    (struct timeval*)0)	> 0) {
		      if (FD_ISSET(0, &r))
			   ...	  /* read keyboard input */
		      if (FD_ISSET(d[0], &r) &&	pvm_nrecv(-1, -1) > 0)
			   ...	  /* got a PVM message */
		 }
	    }

ERRORS
       The following error condition can be returned by	pvm_getfds:

       PvmSysErr
	      pvmd not responding.

SEE ALSO
       pvm_notify(3PVM), pvm_trecv(3PVM)

				 22 Nov, 1994			  GETFDS(3PVM)

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

home | help