Movatterモバイル変換


[0]ホーム

URL:


man7.org > Linux >man-pages

Linux/UNIX system programming training


sync_file_range(2) — Linux manual page

NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |VERSIONS |STANDARDS |HISTORY |NOTES |SEE ALSO |COLOPHON

sync_file_range(2)         System Calls Manualsync_file_range(2)

NAME        top

       sync_file_range - sync a file segment with disk

LIBRARY        top

       Standard C library (libc,-lc)

SYNOPSIS        top

#define _GNU_SOURCE/* See feature_test_macros(7) */#define _FILE_OFFSET_BITS 64#include <fcntl.h>int sync_file_range(intfd, off_toffset, off_tnbytes,unsigned intflags);

DESCRIPTION        top

sync_file_range() permits fine control when synchronizing the open       file referred to by the file descriptorfd with disk.offset is the starting byte of the file range to be synchronized.nbytes specifies the length of the range to be synchronized, in       bytes; ifnbytes is zero, then all bytes fromoffset through to       the end of file are synchronized.  Synchronization is in units of       the system page size:offset is rounded down to a page boundary;(offset+nbytes-1) is rounded up to a page boundary.       Theflags bit-mask argument can include any of the following       values:SYNC_FILE_RANGE_WAIT_BEFORE              Wait upon write-out of all pages in the specified range              that have already been submitted to the device driver for              write-out before performing any write.SYNC_FILE_RANGE_WRITE              Initiate write-out of all dirty pages in the specified              range which are not presently submitted write-out.  Note              that even this may block if you attempt to write more than              request queue size.SYNC_FILE_RANGE_WAIT_AFTER              Wait upon write-out of all pages in the range after              performing any write.       Specifyingflags as 0 is permitted, as a no-op.Warning       This system call is extremely dangerous and should not be used in       portable programs.  None of these operations writes out the file's       metadata.  Therefore, unless the application is strictly       performing overwrites of already-instantiated disk blocks, there       are no guarantees that the data will be available after a crash.       There is no user interface to know if a write is purely an       overwrite.  On filesystems using copy-on-write semantics (e.g.,btrfs) an overwrite of existing allocated blocks is impossible.       When writing into preallocated space, many filesystems also       require calls into the block allocator, which this system call       does not sync out to disk.  This system call does not flush disk       write caches and thus does not provide any data integrity on       systems with volatile disk write caches.Some detailsSYNC_FILE_RANGE_WAIT_BEFOREandSYNC_FILE_RANGE_WAIT_AFTERwill       detect any I/O errors orENOSPCconditions and will return these       to the caller.       Useful combinations of theflags bits are:SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE              Ensures that all pages in the specified range which were              dirty whensync_file_range() was called are placed under              write-out.  This is a start-write-for-data-integrity              operation.SYNC_FILE_RANGE_WRITE              Start write-out of all dirty pages in the specified range              which are not presently under write-out.  This is an              asynchronous flush-to-disk operation.  This is not suitable              for data integrity operations.SYNC_FILE_RANGE_WAIT_BEFORE(orSYNC_FILE_RANGE_WAIT_AFTER)              Wait for completion of write-out of all pages in the              specified range.  This can be used after an earlierSYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE              operation to wait for completion of that operation, and              obtain its result.SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE |SYNC_FILE_RANGE_WAIT_AFTER              This is a write-for-data-integrity operation that will              ensure that all pages in the specified range which were              dirty whensync_file_range() was called are committed to              disk.

RETURN VALUE        top

       On success,sync_file_range() returns 0; on failure -1 is returned       anderrno is set to indicate the error.

ERRORS        top

EBADFfd is not a valid file descriptor.EINVALflags specifies an invalid bit; oroffset ornbytes is              invalid.EIOI/O error.ENOMEMOut of memory.ENOSPCOut of disk space.ESPIPEfd refers to something other than a regular file, a block              device, or a directory.

VERSIONS        top

sync_file_range2()       Some architectures (e.g., PowerPC, ARM) need 64-bit arguments to       be aligned in a suitable pair of registers.  On such       architectures, the call signature ofsync_file_range() shown in       the SYNOPSIS would force a register to be wasted as padding       between thefd andoffset arguments.  (Seesyscall(2) for       details.)  Therefore, these architectures define a different       system call that orders the arguments suitably:int sync_file_range2(intfd, unsigned intflags,off_toffset, off_tnbytes);       The behavior of this system call is otherwise exactly the same assync_file_range().

STANDARDS        top

       Linux.

HISTORY        top

       Linux 2.6.17.sync_file_range2()       A system call with this signature first appeared on the ARM       architecture in Linux 2.6.20, with the namearm_sync_file_range().       It was renamed in Linux 2.6.22, when the analogous system call was       added for PowerPC.  On architectures where glibc support is       provided, glibc transparently wrapssync_file_range2() under the       namesync_file_range().

NOTES        top

_FILE_OFFSET_BITSshould be defined to be 64 in code that takes       the address ofsync_file_range, if the code is intended to be       portable to traditional 32-bit x86 and ARM platforms whereoff_t's       width defaults to 32 bits.

SEE ALSO        top

fdatasync(2),fsync(2),msync(2),sync(2)

COLOPHON        top

       This page is part of theman-pages (Linux kernel and C library       user-space interface documentation) project.  Information about       the project can be found at        ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report       for this manual page, see       ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.       This page was obtained from the tarball man-pages-6.15.tar.gz       fetched from       ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on       2025-08-11.  If you discover any rendering problems in this HTML       version of the page, or you believe there is a better or more up-       to-date source for the page, or you have corrections or       improvements to the information in this COLOPHON (which isnot       part of the original manual page), send a mail to       man-pages@man7.orgLinux man-pages 6.15            2025-05-17sync_file_range(2)

Pages that refer to this page:fsync(2)io_uring_enter2(2)io_uring_enter(2)posix_fadvise(2)syscall(2)syscalls(2)io_uring_prep_sync_file_range(3)off_t(3type)



HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface.

For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere.

Hosting byjambit GmbH.

Cover of TLPI


[8]ページ先頭

©2009-2025 Movatter.jp