您是否注意到头文件中有额外的文档来源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*);
这些用于共享库(参见dlopen()
Linux 上的手册页)。在嵌入式环境中,您可能可以保留这些未实现(尝试将这些设置为 NULL)。
int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut);
如果您的操作系统的标准库还没有提供随机数生成器,您可能必须实现一个随机数生成器。我建议使用线性反馈寄存器,它很小但很好。
int (*xSleep)(sqlite3_vfs*, int microseconds);
int (*xCurrentTime)(sqlite3_vfs*, double*);
int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
这些是时间管理功能,用于连接您的操作系统。
int (*xGetLastError)(sqlite3_vfs*, int, char *);
您可以通过始终在此处返回 0 来逃脱 :-) 请参阅 os_unix.c 中的 unixGetLastError(感谢 Google 代码搜索!)
祝你好运!