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  numbers  of
     the  sockets in order to wait from input from either PVM messages or an ex-
     ternal 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 re-
     ceived.  The simplest approach is to disable direct routing.

     When select returns with a PVM file descriptor ready,  a  complete  message
     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 system.

EXAMPLES
     The following program fragment waits until either keyboard input is  avail-
     able, 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.1.quarterly>

home | help