加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite3 – SQLite VFS实现指南与FOpen *

发布时间:2020-12-12 19:10:13 所属栏目:百科 来源:网络整理
导读:我即将使用FOpen,FRead,FWrite,FSeek和FClose为Netburner嵌入式设备(非 Windows)实现自定义VFS(虚拟文件系统).我很惊讶,我找不到可用的VFS的FOpen *版本.这将使嵌入式设备更加便携. 我在这里找到了一些关于在SQLite中创建VFS的信息 http://sqlite.org/c3ref/
我即将使用FOpen,FRead,FWrite,FSeek和FClose为Netburner嵌入式设备(非 Windows)实现自定义VFS(虚拟文件系统).我很惊讶,我找不到可用的VFS的FOpen *版本.这将使嵌入式设备更加便携.

我在这里找到了一些关于在SQLite中创建VFS的信息
http://sqlite.org/c3ref/vfs.html
但信息非常详细,我还有很多关于实施的其他问题.

我在Winite,OS2,Linux的SQLite源代码中有一些VFS,但是他们没有很多的意见,只是源代码.

我可以使用以上链接中提供的信息和示例来创建我的自定义VFS,但我确信如果我这样做,我会想念一些东西.

我的问题是:

>有没有关于我缺少的SQLite VFS的更多文档?也许是一个实施指南?
>有没有可用的SQLite VFS的Fopen版本?
>有没有一个单元测试代码可用来测试我的自定义SQLite VFS一旦我创建了它?
>您想要分享的实现SQLite VFS的建议,意见和经验.

您是否注意到头文件sqlite3.h中有一个额外的文档来源?此外,Google代码搜索是您的朋友.

不用担心丢失的东西,这就是测试套件.从他们的名字,文档和示例实现中的每个方法的目的猜测;去执行一个初步草案;在目标平台上运行测试;迭代直到栏为绿色.从您引用的界面文档的粗略阅读,这里有一些有教养的猜测:

int (*xOpen)(sqlite3_vfs*,const char *zName,sqlite3_file*,int flags,int *pOutFlags);
  int (*xDelete)(sqlite3_vfs*,int syncDir);
  int (*xAccess)(sqlite3_vfs*,int *pResOut);
  int (*xFullPathname)(sqlite3_vfs*,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*,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 *);

您可以随时返回0 :-)请参阅os_unix.c中的unixGetLastError(感谢Google代码搜索!)

祝你好运!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读