Skip to content

SQLite3の内容をディスクから読み込みしたい #12

Closed Answered by nuta
keisuke713 asked this question in Help
Discussion options

You must be logged in to vote

エラーメッセージから察するに、データベースファイルの読み込み処理が上手くいっていないのだと思います。次の関数を見てみます。

static int hinaosRead(sqlite3_file *file, void *pBuf, int iAmt, sqlite3_int64 iOfst) {

この関数は、書き込み先バッファ (pBuf) に加えて、読み込むバイト数 (iAmt)、ファイルオフセット (iOfst) を受け取っています。つまり [iOfst, iOfst + iAmt) の範囲を読み込むことをSQLite3は要求しています。

原因の部分はこちらです:

    // dbの内容を読み込んでメモリに展開する
    m.type = FS_READ_MSG;
    m.fs_read.fd = fd;
    err = ipc_call(fs_server, &m);

ここでいくつか未実装な部分があります。

  • m.fs_read.len (読み込みたい要求バイト数) が未設定。
  • m.fs_read_reply.data_len (実際に読み込んだバイト数) をチェックしていない。
  • iOfst から読み込むためのファイルハンドルのシーク処理が欠けている。HinaOSにはないので、新たに「ファイルハンドルのオフセット位置を移動する」機能を加える必要がある。

以上を踏まえると、hinaosRead 関数は次のような実装になるはずです 👍

    int offset = 0;
    while (offset < iAmt) {
        // 読み…

Replies: 2 comments 1 reply

Comment options

You must be logged in to vote
0 replies
Answer selected by keisuke713
Comment options

You must be logged in to vote
1 reply
@nuta
Comment options

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Help
Labels
None yet
2 participants