C 標準庫(ISO C99/C11)**不包含** sync() 函數。代碼中出現的 sync() 通常有三種來源:
sync() / fsync() / fdatasync()
#include // POSIX
// sync():將所有修改的內存頁刷新到磁盤(異步,立即返回)
void sync(void);
// fsync(int fd):強制將文件描述符 fd 的所有數據和元數據寫入磁盤(同步阻塞)
int fsync(int fd);
// fdatasync(int fd):類似 fsync 但僅寫入數據,不更新元數據(略快)
int fdatasync(int fd);
用於數據庫、日誌系統、關鍵配置保存等**數據持久化關鍵路徑**。
std::ostream::sync_with_stdio()
#include
// 控制 C++ 流與 C 標準 I/O 的同步狀態
static bool sync_with_stdio(bool sync = true);
關閉同步(std::ios::sync_with_stdio(false))可顯著提升 C++ I/O 性能,但之後不能混用 printf/scanf 與 cin/cout。
項目中自行實現的同步邏輯,如:
void sync_data(ThreadData* a, ThreadData* b)int sync_protocol(Connection* conn)bool sync_cache(Cache* cache)grep -rn "void sync" . --include="*.c" --include="*.h"gcc -E source.c | grep -A5 -B5 "sync"nm executable | grep sync| 函數 | 所屬標準 | 作用 | 頭文件 |
|---|---|---|---|
| sync() | POSIX.1-2001 | 全局文件系統緩衝區刷盤 | <unistd.h> |
| fsync() | POSIX.1-2001 | 單文件強制刷盤 | <unistd.h> |
| fflush() | ISO C | 用戶空間緩衝區刷新到內核 | <stdio.h> |
| sync_with_stdio() | ISO C++ | C/C++ I/O 同步開關 | <iostream> |
遇到未知函數,**優先搜索專案代碼庫**,再查系統頭文件,最後查標準文檔。養成「跳轉定義」習慣,效率提升 10 倍。