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上でできるということ。
開発効率が上がること間違いなし。