---
name: "pvm_recv"
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_recv"
---

# pvm\_recv(3)

Receive a message.

## NAME

pvm\_recv - Receive a message.

## SYNOPSIS

```
C	int bufid = pvm_recv( int tid, int msgtag )
Fortran	call pvmfrecv( tid, msgtag, bufid )
```

## PARAMETERS

- tid

  **Integer task identifier of sending process supplied by the user.**\

- msgtag

  **Integer message tag supplied by the user.** **msgtag should be \>= 0.**\

- bufid

  **Integer returns the value of the new active receive buffer identifier.** **Values less than zero indicate an error.**

## DESCRIPTION

**The routine** *pvm\_recv* **blocks the process until a message with label** *msgtag* **has arrived from** *tid.* **pvm\_recv then places the message in a new** *active* receive buffer, which also clears the current receive buffer.

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

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, message A will arrive at task 2 before message B. Moreover, if both messages arrive before task 2 does a receive, then a wildcard receive will always return message A.

If pvm\_recv is successful, *bufid* will be the value of the new active receive buffer identifier. If some error occurs then *bufid* will be \< 0.

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

Once pvm\_recv returns, the data in the message can be unpacked into the user's memory using the unpack routines.

## EXAMPLES

```
C:
	tid = pvm_parent();
	msgtag = 4 ;
	bufid = pvm_recv( tid, msgtag );
	info = pvm_upkint( tid_array, 10, 1 );
	info = pvm_upkint( problem_size, 1, 1 );
	info = pvm_upkfloat( input_array, 100, 1 );

Fortran:
	CALL PVMFRECV( -1, 4, BUFID )
	CALL PVMFUNPACK( INTEGER4, TIDS, 25, 1, INFO )
	CALL PVMFUNPACK( REAL8, MATRIX, 100, 100, INFO )
```

## ERRORS

These error conditions can be returned by *pvm\_recv*

- PvmBadParam

  giving an invalid tid value, or msgtag \< -1.

- PvmSysErr

  pvmd not responding.

## SEE ALSO

pvm\_bufinfo(3PVM), pvm\_getminfo(3PVM), pvm\_nrecv(3PVM), pvm\_unpack(3PVM), pvm\_probe(3PVM), pvm\_send(3PVM), pvm\_mcast(3PVM)
