---
name: "io_fsync"
section: "3"
platform: "linux"
package: "libaio"
version: "0.3.113-5"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/io_fsync"
---

# io\_fsync(3)

Synchronize a file's complete in-core state with that on disk

## NAME

io\_fsync - Synchronize a file's complete in-core state with that on disk

## SYNOPSIS

```
#include <errno.h>

#include <libaio.h>

int io_fsync(io_context_t ctx, struct iocb *iocb, io_callback_t cb, int fd);

struct iocb {
	void		*data;
	unsigned	key;
	short		aio_lio_opcode;
	short		aio_reqprio;
	int		aio_fildes;
};

typedef void (*io_callback_t)(io_context_t ctx, struct iocb *iocb, long res, long res2);

```

## DESCRIPTION

When dealing with asynchronous operations it is sometimes necessary to get into a consistent state.  This would mean for AIO that one wants to know whether a certain request or a group of request were processed. This could be done by waiting for the notification sent by the system after the operation terminated, but this sometimes would mean wasting resources (mainly computation time).

Calling this function forces all I/O operations operating queued at the time of the function call operating on the file descriptor *iocb-\>io\_fildes* into the synchronized I/O completion state.  The **io\_fsync**() function returns immediately but the notification through the method described in *io\_callback* will happen only after all requests for this file descriptor have terminated and the file is synchronized.  This also means that requests for this very same file descriptor which are queued after the synchronization request are not affected.

## RETURN VALUES

Returns **0**, otherwise returns *errno*.

## ERRORS

- **EFAULT**

  *iocbs* referenced data outside of the program's accessible address space.

- **EINVAL**

  *ctx* refers to an uninitialized aio context, the iocb pointed to by *iocbs* contains an improperly initialized iocb,

- **EBADF**

  The iocb contains a file descriptor that does not exist.

- **EINVAL**

  The file specified in the iocb does not support the given io operation.

## SEE ALSO

[**io**(3)](/io/3.md), [**io\_cancel**(3)](/io_cancel/3.md), [**io\_getevents**(3)](/io_getevents/3.md), [**io\_prep\_pread**(3)](/io_prep_pread/3.md), [**io\_prep\_pwrite**(3)](/io_prep_pwrite/3.md), [**io\_queue\_init**(3)](/io_queue_init/3.md), [**io\_queue\_release**(3)](/io_queue_release/3.md), [**io\_queue\_run**(3)](/io_queue_run/3.md), [**io\_queue\_wait**(3)](/io_queue_wait/3.md), [**io\_set\_callback**(3)](/io_set_callback/3.md), [**io\_submit**(3)](/io_submit/3.md), [**errno**(3)](/errno/3.md).
