---
name: "File::Sync"
section: "3pm"
platform: "linux"
package: "libfile-sync-perl"
version: "0.11-3+b4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/File::Sync"
---

# File::Sync(3pm)

Perl access to fsync() and sync() function calls

## NAME

File::Sync - Perl access to fsync() and sync() function calls

## SYNOPSIS

```
  use File::Sync qw(fsync sync);
  sync();
  fsync(\*FILEHANDLE) or die "fsync: $!";
  # and if fdatasync() is available on your system:
  fdatasync($fh) or die "fdatasync: $!";
  use File::Sync qw(fsync);
  use FileHandle;
  $fh = new FileHandle("> /tmp/foo")
      or die "new FileHandle: $!";
  ...
  $fh->fsync() or die "fsync: $!";
```

## DESCRIPTION

The **fsync()** function takes a Perl file handle as its only argument, and passes its **fileno()** to the C function **fsync()**.  It returns *undef* on failure, or *true* on success. **fdatasync()** is identical in return value, but it calls C **fdatasync()** instead of **fsync()**, synchronizing only the data in the file, not the metadata.

The **fsync\_fd()** function is used internally by **fsync()**; it takes a file descriptor as its only argument.

The **sync()** function is identical to the C function **sync()**.

This module does **not** export any methods by default, but **fsync()** is made available as a method of the *FileHandle* class. Note carefully that as of 0.11, we no longer clobber anything in *IO::Handle*. You can replace any calls to **IO::Handle::fsync()** with **IO::Handle::sync()**:\
   https://rt.cpan.org/Public/Bug/Display.html?id=50418

## NOTES

Doing **fsync()** if the stdio buffers aren't flushed (with `$|` or the *autoflush* method) is probably pointless.

Calling **sync()** too often on a multi-user system is slightly antisocial.

## AUTHOR

Carey Evans \<*c.evans@clear.net.nz*\>

## SEE ALSO

[**perl**(1)](/perl/1.md), [**fsync**(2)](/fsync/2.md), [**sync**(2)](/sync/2.md), [**perlvar**(1)](/perlvar/1.md)
