SYNC(2)

SYNC(2) | System Calls Manual | SYNC(2)

# NAME

`sync` —
synchronize disk block in-core status with that on disk

# LIBRARY

Standard C Library (libc, -lc)

# SYNOPSIS

`#include <unistd.h>`

void
`sync`(void);

# DESCRIPTION

The `sync`() function forces a write of dirty (modified) buffers in the block buffer cache out to disk. The kernel keeps this information in core to reduce the number of disk I/O transfers required by the system. As information in the cache is lost after a system crash, kernel thread `ioflush` ensures that dirty buffers are synced to disk eventually. By default, a dirty buffer is synced after 30 seconds, but some file systems exploit `ioflush` features to sync directory data and metadata faster (after 15 and 10 seconds, respectively).

The function fsync(2) may be used to synchronize individual file descriptor attributes.

# CAUTIONS

Many modern disks contain write-back caches. In theory `sync`() flushes these. In practice there are many possible ways for this mechanism to go astray. It is prudent (where possible) to allow a few seconds after syncing for everything to settle before e.g. turning off the power.

It may also be desirable to use dkctl(8) or scsictl(8) to disable the write-back cache entirely.

# SEE ALSO

fsync(2), dkctl(8), scsictl(8), sync(8)

# HISTORY

A `sync`() function call appeared in Version 6 AT&T UNIX.

Historically, `sync`() would schedule buffers for writing but not actually wait for the writes to finish. It was necessary to issue a second or sometimes a third call to ensure that all buffers had in fact been written out. In NetBSD, `sync`() does not return until all buffers have been written.

March 25, 2009 | NetBSD 9.4