---
name: "pvm_getfds"
section: "3"
platform: "linux"
package: "pvm-dev"
version: "3.4.2-8"
release: "Debian 3.0 (Woody)"
platforms: ["linux"]
url: "https://new.carta.tech/pvm_getfds"
---

# pvm\_getfds(3)

Get file descriptors in use by PVM.

## 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 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 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** **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)**
