サービスコール リファレンス マニュアル
目次
概要
型
戻り値
ファイル I/O
ファイル管理
ディレクトリ管理
デバイス管理
プロセス管理
メモリー管理
パイプ管理
タスクローカルストレージ管理
その他補助ツール
索引
サブシステムで提供される機能を利用するには sc_〜 で定義される C 言語の関数を呼び出します(サービスコール)。
必要なファイルは sc.h (mpltype.h, cputype.h) と sc.a (kc.a) です。
以降でサービスコールに必要な型及び、個々の関数を説明します。
MPL で定義される型を以下に記述します。
型名 | : | 内容 |
byte | : | 8bit 符号無し整数 |
word16 | : | 16bit 符号無し整数 |
word32 | : | 32bit 符号無し整数 |
word | : |
処理系依存の符号無し整数
以下の条件を満たす
- 全ての型のポインターと相互変換及び演算ができる
- 可能な限り大きな数を扱える
- 可能な限り CPU が無理なく操作できる
|
numeric | : |
処理系依存の符号付き整数
以下の条件を満たす
- 全ての型のポインターの演算に使用できる
- 可能な限り大きな数を扱える
- 可能な限り CPU が無理なく操作できる
|
tas_flg | : | kc_tas_try で利用するフラグ |
RESULT | : | カーネルコールの結果 |
HANDLE | : | カーネル資源のハンドル |
HJOB | : | ジョブハンドル |
HTSK | : | タスクハンドル |
HMTX | : | ミューテックスハンドル |
HCND | : | 条件変数ハンドル |
HRPC | : | RPC ハンドル |
サービスコール用に追加される型を以下に記述します。
型名 | : | 内容 |
HFILE | : | ファイルハンドル |
HDIR | : | ディレクトリハンドル |
標準的なカーネルコールの戻り値 (RESULT 型) を以下に記述します。
定数 | : | 値 | : | 意味 |
RC_SUCCESS | : | 0 | : | 正常終了 |
RC_FAIL | : | 1 | : | 異常終了 |
RC_INVALIDATE_ARG | : | 2 | : | 不正な引数 |
RC_INVALIDATE_HANDLE | : | 3 | : | 不正なハンドル |
RC_RIGHTLESS | : | 4 | : | 権利の無い引数・操作 |
RC_JOB_ABORTED | : | 5 | : | job が戻り値を持たない |
RC_JOB_INVALIDATE_PTR | : | 6 | : | wait 中にポインターが無効になった |
RC_MTX_BROKEN | : | 7 | : | 壊れたミューテックス |
RC_RPC_BROKEN | : | 8 | : | reply した rpc は破棄 |
RC_FATAL | : | -1 | : | システムエラー |
RC_RESOURCE_POOR | : | -2 | : | システムリソース不足 |
RC_LIMIT_OVER | : | -3 | : | システム制限値オーバー |
RC_RESERVED | : | -4 | : | 使用中 |
sc_io で始まるサービスコールはファイル I/O 機能を提供します。
I/O 操作するファイルは HFILE 型のハンドルで識別し、入出力命令を実行します。
引数
const char* | path | : | 操作対象にしたいファイルのパス |
word32 | mode | : | オプションフラグ |
戻り値
説明
ファイルを操作するためのハンドルを取得します。
オプションフラグは以下のいずれかを選択します。
定数 | 値 | 意味 |
OPEN_READ | 0 | 読み込み |
OPEN_WRITE | 1 | 書き込み |
OPEN_UPDATE | 2 | 更新 |
OPEN_APPEND | 3 | 追加 |
ファイルが存在しない場合、 OPEN_READ なら処理失敗で終了し、それ以外の場合は sc_file_create でファイルを作成します。
引数
HFILE* | file | : | 複製元のファイルハンドル |
HJOB | job | : | 複製したファイルハンドルのオーナー |
戻り値
説明
ファイルハンドルを複製します。
引数
HFILE* | file | : | 操作を終了したいファイルのハンドル |
戻り値
説明
ファイルハンドルを解放します。
引数
HFILE* | file | : | 操作したいファイルのハンドル |
char* | buf | : | 読み込みバッファ |
word | size | : | 読み込み要求サイズ |
word* | rc_size | : | 実際に読み込んだサイズ |
戻り値
説明
ファイルからデータを読み込みます。
引数
HFILE* | file | : | 操作したいファイルのハンドル |
char* | buf | : | 書き出しバッファ |
word | size | : | 書き出し要求サイズ |
word* | rc_size | : | 実際に書き出したサイズ |
戻り値
説明
ファイルにデータを書き出します。
引数
HFILE* | file | : | 操作したいファイルのハンドル |
word* | pos | : | 位置を取得する領域 |
戻り値
説明
ファイルのデータ操作位置を取得します。
引数
HFILE* | file | : | 操作したいファイルのハンドル |
word | type | : | 操作内容 |
word | offset | : | 移動量 |
戻り値
説明
ファイルのデータ操作位置を設定します。
動作内容は以下の通りです。
定数 | 値 | 動作 |
SETPOS_HEAD | 0 | 先頭からの順方向移動《※絶対位置指定》 |
SETPOS_NEXT | 1 | 現在位置からの順方向移動 |
SETPOS_BACK | 2 | 現在位置からの逆方向移動 |
SETPOS_TAIL | 3 | 末尾からの逆方向移動 |
引数
HFILE* | file | : | 操作したいファイルのハンドル |
word32 | code | : | 機能コード |
IOBUF* | bufs | : | パラメータリスト |
word | cnt | : | パラメータ数 |
戻り値
説明
ファイルに制御コマンドを送ります。
制御コマンドは以下の構造体の配列です。
具体的な内容は個々のデバイスによって異なります。
typedef struct {
void *buff ;
const void *cbuff ;
word size ;
word32 io_flg ;
} IOBUF ;
void* | buff | : | データを指すポインタ |
const void* | cbuff | : | データを指すポインタ(コンスト用:こちらがNULL以外だとbuffの内容は無視する) |
word | size | : | バッファのサイズ(bytes) |
word32 | io_flg | : | バッファの属性 IOBUF_IN…結果を受け取るバッファ IOBUF_OUT…パラメータを渡すバッファ IOBUF_IN|IOBUF_OUT…共有バッファ |
sc_file で始まるサービスコールはファイル管理機能を提供します。
引数
const char* | path | : | 作成するファイルのパス |
戻り値
説明
ファイルを作成します。
既に同名のファイル/ディレクトリが存在する場合は失敗します。
引数
const char* | path | : | 削除するファイルのパス |
戻り値
説明
ファイルを削除します。
ファイル・マウントしたファイルシステム・登録したデバイスドライバーを削除できます。
引数
const char* | src | : | 移動元のファイルパス |
const char* | dest | : | 移動先のファイルパス |
戻り値
説明
ファイルを移動します。
移動可能なのは同一ファイルシステム内部のみで、ファイルシステムを跨いだ移動はできません。
引数
const char* | path | : | ファイルのパス |
FATTR* | attr | : | 属性を受け取る領域 |
戻り値
説明
ファイルの属性を取得します。
内容は以下の通りです。
現在は多くの項目が "ダミー" として項目のみ存在し、実際には機能していません。
typedef struct {
word size ;
word atime ;
word mtime ;
word ctime ;
word32 type ;
word32 uid ;
word32 gid ;
word32 permission ;
word32 set_flg ;
} FATTR ;
word | size | : | ファイルサイズ (byte) |
word | atime | : | 最終アクセス日時 ※ダミー |
word | mtime | : | 最終更新日時 |
word | ctime | : | ファイル作成日時 ※ダミー |
word32 | type | : | ファイルの種類 |
word32 | uid | : | 所有ユーザーID ※ダミー |
word32 | gid | : | 所有グループID ※ダミー |
word32 | permission | : | アクセス権利 ※ダミー |
word32 | set_flg | : | sc_file_getattr() では未使用 |
ファイルの種類は下位 4bit のみ意味を持ち、以下の値を or した値です。
定数 | 値 | 動作 |
FTYPE_IO | 0x00000001 | I/O CTRL |
FTYPE_FILE | 0x00000002 | ファイル |
FTYPE_DIR | 0x00000004 | ディレクトリ |
FTYPE_EXT | 0x00000008 | 拡張 |
permission は 下位 12bit を 4bit 毎に分けて所有者・所有グループ・その他に対応する権利を表します。
以下、bit が 1 なら対応する権利を保持しています。
bit | 対象 | 動作 |
0x00000400 | 所有者 | 読み込み |
0x00000200 | 所有者 | 書き出し |
0x00000100 | 所有者 | 実行/検索 |
0x00000040 | グループ | 読み込み |
0x00000020 | グループ | 書き出し |
0x00000010 | グループ | 実行/検索 |
0x00000004 | その他 | 読み込み |
0x00000002 | その他 | 書き出し |
0x00000001 | その他 | 実行/検索 |
atime, mtime, ctime は UTC 1970/1/1 0:0:0 からの経過秒数です。
引数
const char* | path | : | ファイルのパス |
FATTR | attr | : | 属性 |
戻り値
説明
ファイルの属性を設定します。
内容は基本的にsc_file_getattrと同じですが、設定したい項目を set_flag で指定する点が異なります。
set_flg は以下の値から変更したい物全てを or した値です。
定数 | 値 | 動作 |
SETATTR_UID | 0x00000002 | uid ※ダミー |
SETATTR_GID | 0x00000004 | gid ※ダミー |
SETATTR_PERMISSION | 0x00000008 | permission ※ダミー |
SETATTR_ATIME | 0x00000010 | atime ※ダミー |
SETATTR_MTIME | 0x00000020 | mtime |
SETATTR_CTIME | 0x00000040 | ctime |
SETATTR_ALLUSER | 0x0000000e | 全てのアクセス権 |
SETATTR_ALLTIME | 0x00000070 | 全ての時刻 |
SETATTR_ALL | 0x0000007e | 全ての属性 |
type, size は設定できません。
現在は多くの項目が "ダミー" として項目のみ存在し、実際には機能していません。
sc_dir で始まるサービスコールはディレクトリ管理機能を提供します。
引数
const char* | path | : | 作成するディレクトリのパス |
戻り値
説明
ディレクトリを作成します。
既に同名のファイル/ディレクトリが存在する場合は失敗します。
引数
const char* | path | : | 削除するディレクトリのパス |
戻り値
説明
ディレクトリを削除します。
引数
const char* | path | : | 読み込みたいディレクトリのパス |
戻り値
説明
ディレクトリを読み込むためのハンドルを取得します。
引数
HDIR* | dir | : | 操作を終了したいディレクトリハンドル |
戻り値
説明
ディレクトリハンドルを解放します。
引数
HDIR* | dir | : | 操作を終了したいディレクトリハンドル |
char* | name | : | ファイル名を受け取る領域 |
word | size | : | ファイル名を受け取る領域のサイズ |
FATTR* | attr | : | ファイル属性を受け取る領域(NULL で省略可能) |
戻り値
説明
ディレクトリの内容を1つ読み込みます。
sc_device で始まるサービスコールはデバイス管理機能を提供します。
引数
const char* | path | : | マウント先のファイルパス |
const char* | drive | : | ドライブのファイルパス |
word32 | type | : | ファイルシステムの種類 |
戻り値
説明
ディスクドライブをファイルシステムとしてマウントします。
type は 1 … Human68k ファイルシステム(TwentyOne 拡張)のみ指定可能です。
引数
const char* | path | : | 登録先のファイルパス |
HTSK | tsk | : | ドライバタスク |
HANDLE | id | : | 識別ID |
戻り値
説明
ドライバタスクをファイル/ファイルシステムとして登録します。
sc_process で始まるサービスコールはプロセス管理機能を提供します。
引数
const char* | path | : | 実行ファイルのパス |
char*[] | argv | : | 引数 |
char*[] | envp | : | 環境変数 |
word | level | : | 実行優先度 |
word | stack | : | スタックサイズ(pages) |
HFILE*[] | stdio | : | 標準入出力 |
戻り値
説明
実行ファイルからプロセスを作成します。
argv[]とenvp[]は引数及び環境変数文字列を指すポインタの配列です。
配列の最後のポインタはNULLを格納し配列の終了を宣言してください。
実行優先度とスタックサイズはプロセスのメインタスクに対する条件設定です。
詳細はカーネルコールの同項目を参照してください。
標準入出力はプロセスが開始時に開く入出力及びデバイスを指定します。
この項目はNULLで省略可能です。
省略しない場合はHFILE*[5]を渡してください、内訳は以下の通りで内要を0クリアした要素は個別に指定を省略できます。
[0].標準入力
[1].標準出力
[2].標準エラー出力
[3].キーボード
[4].コンソール
省略した項目は通常sc_process_execを実行したプロセスから継承します。
またここで指定したファイルハンドルは実行したプロセスに渡されるため使用不可能になります。
この関数がエラー終了した場合はハンドルは依然残っているので自身で削除してください。
引数
HJOB | job | : | 終了させるプロセスのハンドル(0 なら自プロセス) |
int | code | : | 終了コード |
戻り値
説明
プロセスを終了します。
終了可能なプロセスは自分か自分の子プロセスのみです。
引数
HJOB | job | : | 終了を待つプロセスのハンドル |
int* | code | : | 終了コードを受け取る領域(NULLで省略可能) |
戻り値
説明
プロセスの終了を待ち、終了コードを取得します。
引数
HJOB | job | : | 終了待ち及び戻り値を放棄するプロセスのハンドル |
戻り値
説明
プロセスの終了時に自動削除するように指示します。
プロセスの終了を待ったり戻り値を取得する事はできなくなります。
引数
char* | path | : | カレントディレクトリを受け取るバッファ |
word | size | : | バッファのサイズ |
word* | rc_size | : | パス文字列長さを受け取る領域(NULL で省略可能) |
戻り値
説明
プロセスのカレントディレクトリを取得します。
バッファの最後には必ず\0が追加されます。
バッファサイズが足りない場合は途中までを取得し、最後に\0を加えます。
rc_size は正しいパス文字列の長さで、バッファに格納されたパス文字列の長さではないので注意してください。
引数
戻り値
説明
プロセスのカレントディレクトリを移動します。
引数
HFILE*[] | read | : | 標準入出力ハンドルを受け取る領域 |
戻り値
説明
プロセスの標準入出力を取得します。
取得したハンドルはプロセスの所持するハンドルの複製なので不要になったら閉じてください。
- [0] … 標準入力
- [1] … 標準出力
- [2] … 標準エラー出力
- [3] … キーボード
- [4] … コンソール
引数
HFILE*[] | read | : | 標準入出力ハンドルを受け取る領域 |
戻り値
説明
プロセスの標準入出力を設定します。
設定したハンドルはプロセス側に管理が移動するので以後アクセスしないでください。
配列の内容は以下の通りです。
- [0] … 標準入力
- [1] … 標準出力
- [2] … 標準エラー出力
- [3] … キーボード
- [4] … コンソール
メモリーブロックの動的確保について説明します。
kc_ram_alloc等でも同様の処理ができますが、プロセスと結びつけて管理するために通常はこちらを利用してください。
引数
word | size | : | 確保したいメモリーブロックのサイズ |
戻り値
説明
メモリーブロックを確保します。
サイズはbyteで指定します。
引数
戻り値
説明
メモリーブロックを解放します。
パイプ処理に付いて説明します。
パイプは2つのプロセスの標準入出力をつなげるためのFIFO機能です。
引数
HFILE*[] | file | : | ハンドルを受け取る領域 |
word | size | : | バッファサイズ |
戻り値
説明
パイプを作成します。
パイプはバイナリーデータを転送するための一方向キューです。
書き込み用ハンドルに対して出力したデータを読み出し用ハンドルから入力する事ができます。
パイプが保持しているバッファが不足しない限り読み出し・書き込み共に非同期で処理できます。
サイズに 0 を指定した場合はデフォルト値(4096 byte)で代用されます。
ハンドルの内容は以下の通りです。
タスクローカルストレージに付いて説明します。
タスクローカルストレージは個々のタスク毎に保持できるデータ領域です。
データを示す名前文字列と内容(word値)のペアとして管理します。
引数
const char* | name | : | 識別名 |
word* | data | : | データを受け取る領域 |
戻り値
説明
タスクローカルデータを取得します。
引数
const char* | name | : | 識別名 |
word | data | : | 設定するデータ |
戻り値
説明
タスクローカルデータを登録・変更します。
現在TLSを持ったタスクが終了しても即座にTLSが解放されず、タスクの所属するプロセスが終了するまで解放が延期される問題が有ります。
その他、雑多なツールを以下に説明します。
引数
const char* | path | : | パス文字列 |
char* | dir | : | ディレクトリ文字列を受け取る領域(NULL で省略可能) |
char* | file | : | ファイル名を受け取る領域(NULL で省略可能) |
戻り値
説明
パス文字列をディレクトリとファイル名に分割します。
dir, file は各々 char dir[MAX_PATHLEN], char file[MAX_NAMELEN] のサイズを用意してください。
ディレクトリ文字列はルートディレクトリの場合以外は最後の区切り文字 '/' が省略されます。
引数
char* | path | : | パス文字列を受け取る領域 |
const char* | dir | : | ディレクトリ文字列 |
const char* | file | : | ファイル名 |
戻り値
説明
ディレクトリ文字列とファイル名からパス文字列を合成します。
path には char path[MAX_PATHLEN] のサイズを用意してください。
ディレクトリ文字列最後の区切り文字 '/' は有っても無くてもかまいません。
引数
戻り値
説明
文字列をコンソールに表示します。
引数
戻り値
説明
数値をコンソールに表示します。
引数
戻り値
説明
数値をコンソールに表示します。
引数
戻り値
説明
数値をコンソールに16進数で表示します。