## f_sync

The f_sync function flushes the cached information of a writing file.

    FRESULT f_sync (
      FIL* fp     /* [IN] File object */
    );

#### Parameter

fp
  Pointer to the open file object to be flushed.

#### Return Values

FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_INVALID_OBJECT, FR_TIMEOUT

#### Description

The `f_sync` function performs the same process as `f_close` function but the file is left opened and can continue read/write/seek operations to the file. This is suitable for the applications that open files for a long time in write mode, such as data logger. Performing `f_sync` function in certain interval can minimize the risk of data loss due to a sudden blackout, wrong media removal or unrecoverable disk error. For more information, refer to application note.

    Case 1. Normal write sequence

                                    Time -->                                     ↓Normal shutdown
    OwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwC <Power off>

    Case 2. Without using f_sync()

                                    Time -->                             ↓System crush
    Owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
     |<--------------- All data written will be lost ------------------>|

    Case 3. Using f_sync()
                                    Time -->                             ↓System crush
    OwwwwwwwwSwwwwwwwwSwwwwwwwwSwwwwwwwwSwwwwwwwwSwwwwwwwwSwwwwwwwwSwwwww
                                Data after last f_sync will be lost |<->|
    O - f_open()
    C - f_close()
    w - f_write()
    S - f_sync()

However there is no sense in `f_sync` function immediataly before `f_close` function because it performs `f_sync` function in it. In other words, the differnce between those functions is that the file object is invalidated or not.

#### QuickInfo

Available when `FF_FS_READONLY == 0`.

#### See Also

`f_close`, Critical section

Return