---
name: "xdf_read"
section: "3"
platform: "linux"
package: "libxdffileio-dev"
version: "0.3-4+b2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/xdf_read"
---

# xdf\_read(3)

Read samples from a xDF file

## NAME

xdf\_read - Read samples from a xDF file

## SYNOPSIS

**#include \<xdfio.h\>**

**int xdf\_read(struct xdf\*** *xdf***, unsigned int** *ns***, ...);**\

## DESCRIPTION

**xdf\_read**() reads *ns* samples from the xDF file referenced by *xdf*. This file should have been opened with mode **XDF\_READ** and **xdf\_prepare\_arrays**(3) should have been successfully called on it. **xdf\_read**() will fail otherwise).

The data to be read will be transferred into arrays specified by pointers provided in the variable list of arguments of the function.  The function expects the same number of arrays as specified by previous call to [**xdf\_define\_arrays**(3)](/xdf_define_arrays/3.md). The internal organisation of the data in the arrays should have been specified previously with calls to [**xdf\_set\_chconf**(3)](/xdf_set_chconf/3.md).

In addition, it is important to note that none of the arrays should overlap.

## RETURN VALUE

The function returns the number of the samples successfully read from the xDF file in case of success. The number of samples read can be smaller than the number requested in the end of the file is reached. In case of error, -1 is returned and *errno* is set appropriately.

## ERRORS

- **EINVAL**

  *xdf* is NULL

- **EPERM**

  No successfull call to [**xdf\_prepare\_transfer**(3)](/xdf_prepare_transfer/3.md) have been done on *xdf* or it has been opened using the mode **XDF\_WRITE**.

- **EINTR**

  The call was interrupted by a signal before any data was written; see [**signal**(7)](/signal/7.md).

- **EIO**

  A low-level I/O error occurred while reading from the inode.

- **ESTALE**

  Stale file handle. This error can occur for NFS and for other file systems

## EXAMPLE

```
/* Assume xdf references a xDF file opened for reading whose
channels source their data in 2 arrays of float whose strides
are the length of respectively 4 and 6 float values,
i.e. 16 and 24 bytes (in most platforms)*/
#define NS    3
float array1[NS][4], array2[NS][6];
unsigned int strides = {4*sizeof(float), 6*sizeof(float)};
unsigned int i;
xdf_define_arrays(xdf, 2, strides);
if (xdf_prepare_transfer(xdf))
	return 1;
for (i=0; i<45; i+=NS) {
	/* Write the values to the file */
        if (xdf_write(xdf, NS, array1, array2))
		return 1;
	/* Use the values contained in array1 and array2*/
	...
}
xdf_close(xdf);
```

## SEE ALSO

[**xdf\_set\_chconf**(3)](/xdf_set_chconf/3.md), [**xdf\_define\_arrays**(3)](/xdf_define_arrays/3.md), [**xdf\_prepare\_transfer**(3)](/xdf_prepare_transfer/3.md)
