您是否注意到頭文件sqlite3.h
中有其他文檔來源?此外,谷歌代碼搜索是你的朋友。
不要太擔心丟失的東西,這是測試套件的用途。從他們的名字,文檔和示例實現中猜測每種方法的目的;去執行第一稿;在目標平臺上運行測試;迭代直到條形圖爲綠色。從你所引用的接口文檔的粗略瀏覽一下,這裏有一些猜測:
int (*xOpen)(sqlite3_vfs*, const char *zName, sqlite3_file*,
int flags, int *pOutFlags);
int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir);
int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut);
int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut);
那是你決勝的磨文件管理功能。你會注意到xOpen()
反過來返回一個結構sqlite3_file
,它具有它自己的讀寫指針方法。
void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename);
void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg);
void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void);
void (*xDlClose)(sqlite3_vfs*, void*);
這些都是共享庫(見在Linux上的dlopen()
手冊頁)。在嵌入式環境中,您可能會保留這些未實現(嘗試將它們設置爲NULL)。
int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut);
您可能需要實現一個隨機數生成器,如果你的操作系統」標準庫不提供一個了。我建議一個linear feedback register,這是小而好。
int (*xSleep)(sqlite3_vfs*, int microseconds);
int (*xCurrentTime)(sqlite3_vfs*, double*);
int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
這些是時間管理功能,以便與您的操作系統掛鉤。
int (*xGetLastError)(sqlite3_vfs*, int, char *);
,你可以一直在這裏os_unix.c :-)見unixGetLastError返回0(感謝谷歌代碼搜索跑不掉!)
祝你好運!
如果你在嵌入式設備上運行Linux,爲什麼你需要實現一個新的SQLite VFS? – 2010-08-08 03:19:14
它不是Linux或Windows或OS2,它是http://www.freertos.org/的修改版本,不包括Linux/windows庫 – 2010-08-08 20:38:09
我認爲你的意思是「實施*指導*」而不是「實施公會」。行會是一個工匠組織(有點像工會,但更多,這個,中世紀)。 我對你的問題沒有很好的答案,但我懷疑'fopen'和朋友不能用於sqlite,因爲沒有鎖定機制和語義,尤其是關於數據到達永久存儲時的語義,並不像因爲sqlite需要它們。 – zwol 2010-08-11 20:10:36