Monaのfile_serverがLinuxで動いた

ここ1ヶ月くらいやっていたことが実を結んだ!。


file_serverを起動して

colinux% ./file_server                                                                                


clientを実行すると

./fsclient
.
..
APPS
PROCESS.BIN
SERVERS
T5LZMA.EXE

file_serverの管理下にあるISO9660ファイルシステムディレクトリ列挙ができた。


clientコードはこんな感じ。

monapi_cmemoryinfo* monapi_call_file_read_directory(const char* path, MONAPI_BOOL prompt)
{
    monapi_cmemoryinfo* ret;
    dword tid = Message::lookupMainThread("file_server");
    MessageInfo msg;
    if (Message::sendReceive(&msg, tid, MSG_FILE_READ_DIRECTORY, prompt, 0, 0, path) != 0)
    {
        return NULL;
    }
    if (msg.arg2 == 0) return NULL;

    ret = monapi_cmemoryinfo_new();
    ret->Handle = msg.arg2;
    ret->Owner  = tid;
    ret->Size   = msg.arg3;
    monapi_cmemoryinfo_map(ret);
    return ret;
}

int main()
{
    Message::initialize();

    monapi_cmemoryinfo* mi = monapi_call_file_read_directory("/", MONAPI_FALSE);
    monapi_directoryinfo* p = (monapi_directoryinfo*)&mi->Data[sizeof(int)];
    int size = *(int*)mi->Data;
    for (int i = 0; i < size; i++, p++)
    {
        printf("%s\n", p->name);
    }
    monapi_cmemoryinfo_dispose(mi);
    monapi_cmemoryinfo_delete(mi);

    return 0;
}


MonaAPI(共有メモリ・メッセージ)を使っているmonapi_call_file_read_directoryがそのままのコードで動くところが素晴らしい!。
何がすごいかというと、OSの必須コンポーネントであるファイルシステムの開発が丸ごとLinux上でできるということ。
開発効率が上がること間違いなし。