功能的主要实现
该文件对于功能的实现主要是通过一系列的函数和结构体。该文件的主线函数是sqlite3_os_init(),初始化操作系统接口,这个程序为所有类Unix操作系统的VFS实现注册。这个程序和紧随其后的sqlite3_os_end()程序是本文件中对其他文件可见的唯一程序,这个程序在SQLite初始化时便会通过单线程调用。
这个文件挂载了一些VFS(虚拟文件系统),每个VFS都包含一套系统调用的接口:
#define UNIXVFS(VFSNAME, FINDER) 3, /\* iVersion \*/<br>
sizeof(unixFile), /\* szOsFile \*/<br>
MAX_PATHNAME, /\* mxPathname \*/<br>
0, /\* pNext \*/<br>
VFSNAME, /\* zName \*/<br>
(void\*)&FINDER, /\* pAppData \*/<br>
unixOpen, /\* xOpen \*/<br>
unixDelete, /\* xDelete \*/<br>
unixAccess, /\* xAccess \*/<br>
unixFullPathname, /\* xFullPathname \*/<br>
unixDlOpen, /\* xDlOpen \*/<br>
unixDlError, /\* xDlError \*/<br>
unixDlSym, /\* xDlSym \*/<br>
unixDlClose, /\* xDlClose \*/<br>
unixRandomness, /\* xRandomness \*/<br>
unixSleep, /\* xSleep \*/<br>
unixCurrentTime, /\* xCurrentTime \*/<br>
unixGetLastError, /\* xGetLastError \*/<br>
unixCurrentTimeInt64, /\* xCurrentTimeInt64 \*/<br>
unixSetSystemCall, /\* xSetSystemCall \*/<br>
unixGetSystemCall, /\* xGetSystemCall \*/<br>
unixNextSystemCall, /\* xNextSystemCall \*/<br>
}
这是一套虚拟文件系统的标准系统调用接口,为一个sqlite3_vfs对象定义了一个初始化器,通过这些接口可以操作VFS下的文件。而挂载是在如下代码中完成的:
for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){<
sqlite3\_vfs\_register(&aVfs[i], i==0);
}
return SQLITE_OK
}
所有为Unix的默认VFS都包含了如下数组:
static sqlite3_vfs aVfs[]
初始化的虚拟文件系统列表在这个数组中。
而在如下代码中,定义了一套标准的系统调用接口组件:
static struct unix_syscall {
const char \*zName; /\* Name of the system call */
sqlite3\_syscall\_ptr pCurrent; /\* Current value of the system call */
sqlite3\_syscall\_ptr pDefault; /\* Default value \*/ <br>
}
我们顺着主要的接口之一unixOpen(),得到其主线流程如下图所示:

图1.1 unixOpen()程序流程图