헤더 파일 sqlite3.h
에 추가 문서가 있음을 확인 했습니까? 또한 Google 코드 검색은 친구입니다.
누락 된 항목에 대해 너무 걱정하지 마십시오. 테스트 스위트가 필요한 것입니다. 이름, 문서 및 예제 구현에서 모든 메소드의 목적을 추측 해보십시오. 첫 번째 초안 구현을 위해 가야한다. 타겟 플랫폼에서 테스트를 실행하십시오. 막대가 녹색이 될 때까지 반복합니다.
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);
OS 표준 라이브러리가 이미 제공하지 않은 경우 난수 생성기를 구현해야 할 수도 있습니다. 작지만 좋은 linear feedback register을 제안합니다.
int (*xSleep)(sqlite3_vfs*, int microseconds);
int (*xCurrentTime)(sqlite3_vfs*, double*);
int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
다음은 시간 관리 기능으로, 사용중인 OS에 연결하는 데 사용됩니다.
int (*xGetLastError)(sqlite3_vfs*, int, char *);
당신은 항상 (os_unix.c 여기를 참조 unixGetLastError :-) 덕분에 구글 코드 검색을 0을 반환하여 멀리 얻을 수 있습니다!)
행운을 빌어 요!
임베디드 장치에서 Linux를 실행하는 경우 왜 새로운 SQLite VFS를 구현해야합니까? –
그것의 리눅스 또는 Windows 또는 OS2, http://www.freertos.org/의 수정 된 버전 및 리눅스/windows 라이브러리를 포함하지 않습니다 –
나는 "구현 가이드 *" "구현 길드"가 아니라고 생각합니다. 길드는 장인의 조직입니다 (일종의 조합이지만, 중세). 나는 당신의 질문에 대한 좋은 대답이 없지만, 잠금 메커니즘과 의미론이 없기 때문에'fopen'과 친구들을 sqlite로 사용할 수 없다고 생각합니다. 특히 데이터가 영구 저장 장치에 도착할 때와 같이 sqlite가 필요로하기 때문에 아래로 못을 박았다. – zwol