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