{
  "slug": "f-fullfsync",
  "term": "F_FULLFSYNC",
  "aliases": [
    "Darwin full file synchronization"
  ],
  "definition": "F_FULLFSYNC is a Darwin fcntl operation that synchronizes a file and requests flushing buffered drive data to permanent storage.",
  "note": "The operation adds a drive-cache flush request after file synchronization. It can take appreciable time; the archived manual reports ignored requests on some FireWire drives. [apple-fcntl]\n\nOn iOS, F_FULLFSYNC is documented as best-effort. Data can still be lost during sudden power failure. Requesting a stronger synchronization operation is not a universal guarantee of power-loss survival. [apple-writes]\n\nSQLite separates when its VFS is synchronized from which synchronization method it requests: synchronous=FULL is not fullfsync=ON. The fullfsync setting selects F_FULLFSYNC where supported; checkpoint_fullfsync selects it for checkpoints unless fullfsync is already enabled. Both flags default off in the documentation. [sqlite-sync-flags] [sqlite-fullfsync] [sqlite-checkpoint-fullfsync]\n\nIn SQLite 3.46.1, the Unix VFS full_fsync helper attempts ordinary fsync when F_FULLFSYNC returns nonzero in the HAVE_FULLFSYNC build path. If that fallback succeeds, the helper returns success. Thus a successful synchronization return does not by itself identify which operation succeeded. This is pinned source inspection, not a device test or a claim about every SQLite build. [sqlite-unix-sync]",
  "provenance": [
    "Source review, not a macOS or iOS runtime experiment or power-loss test.",
    "The archived Apple manual supplies the API description; its filesystem list is not a current compatibility matrix. [apple-fcntl]",
    "The best-effort statement is explicitly scoped to iOS in current Apple guidance. [apple-writes]"
  ],
  "status": "shipping",
  "advantages": [],
  "limitations": [],
  "related": [
    "fsync",
    "write-back-cache",
    "persistence-ordering",
    "sqlite-wal-end-mark"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "apple-fcntl",
      "title": "Apple archived fcntl(2): F_FULLFSYNC",
      "url": "https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/fcntl.2.html",
      "accessed": "2026-11-13"
    },
    {
      "id": "apple-writes",
      "title": "Apple: Reducing disk writes, explicit storage synchronization",
      "url": "https://developer.apple.com/documentation/xcode/reducing-disk-writes",
      "accessed": "2026-11-13"
    },
    {
      "id": "sqlite-sync-flags",
      "title": "SQLite: Synchronization Type Flags",
      "url": "https://www.sqlite.org/c3ref/c_sync_dataonly.html",
      "accessed": "2026-11-13"
    },
    {
      "id": "sqlite-fullfsync",
      "title": "SQLite: fullfsync and checkpoint_fullfsync pragmas",
      "url": "https://sqlite.org/pragma.html#pragma_fullfsync",
      "accessed": "2026-11-13"
    },
    {
      "id": "sqlite-checkpoint-fullfsync",
      "title": "SQLite: checkpoint_fullfsync pragma",
      "url": "https://sqlite.org/pragma.html#pragma_checkpoint_fullfsync",
      "accessed": "2026-11-13"
    },
    {
      "id": "sqlite-unix-sync",
      "title": "SQLite 3.46.1: full_fsync Unix VFS fallback",
      "url": "https://github.com/sqlite/sqlite/blob/f3d536d37825302e31ed0eddd811c689f38f85a3/src/os_unix.c",
      "accessed": "2026-11-13"
    },
    {
      "id": "hesela-fullfsync",
      "title": "Hesela: Apple synchronization and SQLite settings",
      "url": "https://hesela.com/analyses/fsync-failure-retry-durability/#apple-fullfsync",
      "accessed": "2026-11-13"
    }
  ],
  "updated": "2026-11-13"
}
