LIBSTAND
Section: C Library Functions (3)
索引
jman
BSD mandoc
索引
名称
libstand
- スタンドアローン実行用サポートライブラリ
索引
書式
In stand.h
索引
解説
libstand
は、スタンドアローンアプリケーションのサポート関数群と、
標準
BSD プログラミングが可能な模擬環境を備えています。
後のセクションでこれらの関数を種類分けしています。
ここに明確な定義がない場合は、指定の関数のセクション 3 の
マニュアルページの該当個所を参照して下さい。
索引
文字列関数
使用できる文字列関数は、
string(3)
および
bstring(3)
に書かれています。
索引
メモリアロケーション
-
Ft void *
Fn malloc size_t size
-
Fa size
で指定した大きさのメモリを最適なアルゴリズムでヒープ領域から割り
当てます。
-
Ft void
Fn free void *ptr
-
Fa ptr
に割り当てられたオブジェクトを解放します。
-
Ft void
Fn setheap void *start void *limit
-
ヒープ領域を初期化します。この関数は、
Fn alloc
を最初に呼び出す前に実行しなければなりません。
Fa start
と
Fa limit
の間の領域がヒープ領域に使用されます。
これを越えて割り当てようとすると panic となります。
-
Ft char *
Fn sbrk int junk
-
Fn sbrk 0
の性質を与えます。すなわちヒープ領域の最高位アドレスのポインタを
返します。この戻り値は、テスト時にヒープの実使用状況を判断するのに
使用できます。引数
Fa junk
は無視されます。
索引
環境
伝統的なシェルサポート環境と同様、フラットな変数空間操作のために
一群の関数が備わっています。主な拡張として、フック関数の設定/設定解除の
ためのサポートがあります。
-
Ft char *
Fn getenv const char *name
-
-
Ft int
Fn setenv const char *name char *value int overwrite
-
-
Ft int
Fn putenv const char *string
-
-
Ft int
Fn unsetenv const char *name
-
これらの関数は、標準ライブラリと類似の動作をします。
-
Ft struct env_var *
Fn env_getenv const char *name
-
その環境内での変数を検索し、すべてのデータ構造を返します。
-
Ft int
Fn env_setenv const char *name int flags char *value ev_sethook_t sethook ev_unsethook_t unsethook
-
Fa name
という環境変数の新規作成または既存環境変数の設定を行います。
新規変数を生成する場合は、引数
Fa sethook
および
Fa unsethook
を指定することができます。
- EV_NOHOOK フラグが設定されていなければ、変数設定をしようとするとすると、
フックの設定が必ず起動されます。通常、引数
Fa value
の確認を行ない、実際に値を保存するために EV_NOHOOK 変数をつけて、再度
Fn env_setenv
呼び出しを行い設定します。すべての変数設定を拒否するために、定義済み関数
Fn env_noset
を指定することができます。
設定解除フックは、変数の設定解除が行われるときに起動されます。
戻り値が 0 のとき、変数の設定解除されています。定義済み関数
Fa env_nounset
は、変数設定解除を抑制するのに使用します。
索引
標準ライブラリサポート
-
Ft int
Fn getopt int argc char * const *argv cont char *optstring
-
-
Ft long
Fn strtol const char *nptr char **endptr int base
-
-
Ft void
Fn srandom unsigned long seed
-
-
Ft unsigned long
Fn random void
-
-
Ft char *
Fn strerror int error
-
でサポートされている errno のサブセット値に対応する
エラーメッセージを返します。
- Fn assert expression
-
In assert.h
行が必要です。
-
Ft int
Fn setjmp jmp_buf env
-
-
Ft void
Fn longjmp jmp_buf env int val
-
操作できるシグナル状態がないため、それぞれ
Fn _setjmp
および
Fn _lonjmp
として定義されています。
In setjmp.h
行が必要です。
索引
キャラクタ I/O
-
Ft void
Fn gets char *buf
-
キャラクタをコンソールから
Fa buf
に読み込みます。標準的な注意事項が本関数に
対して適用されます。
-
Ft void
Fn ngets char *buf size_t size
-
Fa size
-1 またはそれ以下の文字をコンソールから
Fa buf
に読み込みます。行末文字は削除され、
バッファは常にヌルが終端文字になります。
Fa size
が 1 以下の場合、関数は
Fn gets
と同じ動作をします。
-
Ft int
Fn fgetstr char *buf int size int fd
-
一行を
Fa size
文字以下の範囲で
Fa buf
に読み込みます。行末のキャラクタは切り捨てられ、
バッファは常にヌルが終端となります。
正常終了のときは
Fa buf
内の文字数を返し、読み込みエラーのときは -1 を返します。
-
Ft int
Fn printf const char *fmt ...
-
-
Ft void
Fn vprintf const char *fmt va_list ap
-
-
Ft int
Fn sprintf char *buf const char *fmt ...
-
-
Ft void
Fn vsprintf char *buf const char *fmt va_list ap
-
*printf 関数は、標準
Fn printf
ファミリのサブセット機能といくつかの拡張機能を備えています。
- c,d,n,o,p,s,u,x の標準変換がサポートされています。
+,-,#,*,0, field width,precision,l の修飾子がサポートされています。
エラーレジスタをデコードするために
b
変換が備わっています。
使い方は以下の通りです。
printf(
Qq reg=%b\n ,
regval,
Qq <base><arg>*
);
Aq Pa base
は、制御キャラクタの出力を表現しています。例えば
\10 は 10 進数を、\20 は 16 進数を意味します。各
Aq Pa arg
は、文字列で、最初の一文字は引数のビット数(始めが1)で、
ビットが設定されている場合、それ以降の文字列(32文字未満)は表示対象の
テキストです。つまり、
printf(
Qq reg=%b\n
3
Qq \10\2BITTWO\1BITONE\n
);
により出力表示されます。
reg=3<BITTWO,BITONE>
D
変換は、16 進数ダンプの機能を備えています。
たとえば、以下。
printf(
Qq %6D ,
ptr,
Qq :
); gives
Qq XX:XX:XX:XX:XX:XX
printf(
Qq %*D ,
len,
ptr,
Qq
); gives
Qq XX XX XX ...
索引
文字テストと変換
-
Ft int
Fn isupper int c
-
-
Ft int
Fn islower int c
-
-
Ft int
Fn isspace int c
-
-
Ft int
Fn isdigit int c
-
-
Ft int
Fn isxdigit int c
-
-
Ft int
Fn isascii int c
-
-
Ft int
Fn isalpha int c
-
-
Ft int
Fn toupper int c
-
-
Ft int
Fn tolower int c
-
索引
ファイル入出力
-
Ft int
Fn open const char *path int flags
-
open(2)
の動作に似ています。ただし、ファイル作成機能がサポート
されていないため、モードパラメータは不要です。引数
Fa flags
には、O_RDONLY, O_WRONLY, O_RDWR のどれかを指定できます。
(たとえ、現在書込みをサポートするファイルシステムが無いとしても)
-
Ft int
Fn close int fd
-
-
Ft void
Fn closeall void
-
すべての open されているファイルを閉じます。
-
Ft ssize_t
Fn read int fd void *buf size_t len
-
-
Ft ssize_t
Fn write int fd void *buf size_t len
-
(現在書き込みをサポートしているファイルシステムはありません)
-
Ft off_t
Fn lseek int fd off_t offset int whence
-
読み込みの最中に自動的に解凍されるファイルは、現在の位置から後方に
- seek することはできません。
-
Ft int
Fn stat const char *path struct stat *sb
-
-
Ft int
Fn fstat int fd struct stat *sb
-
関数
Fn stat
および
Fn fstat
は、
Fa sb
構造体のフィールド : st_mode, st_nlink,st_uid,st_gid,st_size
への書き込みだけをします。
tftp
ファイルシステムでは、この関数の呼び出しは
意味のある値になりません。また
cd9660
ファイルシステムは、ファイルの uid/gid が常に 0 であると
報告して来ます。
索引
ページャ
libstand
は簡単な内部ページャを提供し、大きなコマンドの出力を読みやすくします。
-
Ft void
Fn pager_open
-
ページャを初期化し、次の出力行が表示装置の先頭であることを知らせます。
環境変数 LINES は、一度に表示可能な行数を決める際に参照されます。
-
Ft void
Fn pager_close void
-
ページャを閉じます
-
Ft int
Fn pager_output char *lines
-
Fa lines
で指定された、ヌルで終了するバッファの行がページャに送られます。
改行文字を数えることで、出力される行数が決まります。
(折り返しは含みません)
すべての行が出力されると、
Fn pager_output
は 0 を返します。画面表示が停止し、ユーザが途中終了を
選択したときは 0 以外の値を返します。
-
Ft int
Fn pager_file char *fname
-
ファイル
Fa fname
を開き、画面表示します。エラーのときは
-1 を返し、EOF のときは 0 を、ユーザが読み込みを途中終了する場合は
- 1 を返します。
索引
その他
-
Ft void
Fn twiddle void
-
連続呼び出しの場合、ユーザが確認できるように、
文字列 |,/,-,\ の後にバックスペースを付けて出力します。
索引
低レベルサポートの要求
スタック、ヒープ、コンソール、デバイスは、
libstand
でよく使われるリソースです。
スタックは、
libstand
関数が起動される前に構築する必要があります。
スタック要求は、関数や使われているファイルシステム、および、後で詳述する
サポートレイヤ関数によって変化します。
ヒープは、
Fn alloc
関数や
Fn open
関数の呼び出しの前に、
Fn setheap
呼び出しを行なって構築しなければなりません。ヒープの使用法は、クライアントの
動作と同様、同時に open するファイルの数によって変化します。自動解凍をす
ると、ファイルを open する度に 64K 以上のデータが割り当てられます。
コンソールアクセスは、後述の関数
Fn getchar ,
Fn putchar ,
Fn ischar
によって行われます。
デバイスアクセスは
Fn devopen
によって初期化され、
Fn devopen
が返すデバイススイッチ構造体の関数
Fn dv_strategy ,
Fn dv_ioctl ,
Fn dv_close
によって実行されます。
ユーザは次のサポート関数を用意する必要があります。
-
Ft int
Fn getchar void
-
コンソールから、関数
Fn gets ,
Fn ngets
やページャ関数によって使われる文字を返します。
-
Ft int
Fn ischar void
-
コンソールから入力待ちの状態のとき、0 でない値を返します。
-
Ft void
Fn putchar int
-
コンソールに、
Fn gets ,
Fn ngets ,
Fn *printf ,
Fn panic ,
Fn twiddle
および
他の多くのデバッグ、情報通知用の関数が使用する文字を書き出します。
-
Ft int
Fn devopen struct open_file *of const char *name char **file
-
Fa name
という名前のファイル用の適当なデバイスを開き、デバイスを参照しない
ファイルの残りの部分の
Fa name
を指すポインタを、
Fa file
に返します。
Fa of
の構造体フィールド
f_dev
は、正常終了した場合、open したデバイスの
Vt devsw
構造体を指すようにセットされます。
デバイス識別子は、常にパス構成の先頭に来る
必要がありますが、それ以外は自由にフォーマットされています。
Fn open
や
デバイス関連の I/O で使用されます。
-
Ft int
Fn devclose struct open_file *of
-
Fa of
に割り当てられたデバイスを閉じます。
デバイスドライバ自身はクローズ処理のためにすでに呼び出しが行われており、
この呼び出しは、
Fn devopen
による割り当てを解除するだけです。
-
Ft void
Fn panic const char *msg ...
-
致命的で回復不能なエラー状態を通知します。引数
Fa msg ...
は、
Fn printf
のものと同様です。
索引
内部ファイルシステム
内部ファイルシステムでは、
Vt struct fs_ops *file_system[]
の構造体の配列を、ユーザ
がエクスポートでき、配列は構造体
Vt struct fs_ops
へのポインタで初期化されます。
以下のファイルシステムハンドラが
に
備わっていますが、ユーザは自分で別のファイルシステムを
提供することができます。
- ufs_fsops
-
BSD の UFS
- ext2fs_fsops
-
- Linux の ext2fs ファイルシステム
- tftp_fsops
-
TFTP 経由のファイルアクセス
- nfs_fsops
-
NFS 経由のファイルアクセス
- cd9660_fsops
-
ISO 9660 (CD-ROM) ファイルシステム
- zipfs_fsops
-
ファイルをサポートしているファイルシステムの
gzip されたファイルをサポートするスタック
されたファイルシステムで、zipfs ファイルシステムを使おうとすると、
libstand
はファイル名の後に
.gz
を付加し、更に別のファイルシステムを使用してファイルの位置を決めます。
このファイルシステムの、配列
file_system[]
での配置によって、
non-gzipped ファイルを参照している gzipped ファイルが
open されるかどうかが決められます。
gzip されたファイルは前方へ seek することだけができ、gzip されたファイルへの
Fn stat
および
Fn fstat
は、長さの不正を報告します。
- bzipfs_fsops
-
zipfs_fsops
と同様ですが、
bzip2
で圧縮されたファイルを使用します。
構造体
Vt struct fs_ops
のポインタ配列はヌルで終了しなければなりません。
索引
デバイス
デバイスは、ヌルで終了するデバイススイッチ構造体のポインタ配列である、
Vt struct devsw *devsw[]
経由のサポートコードによってエクスポートされます。
索引
バグ
詳細なメモリ使用データがないのは不親切です。
索引
歴史
libstand
は多くのソースを利用しています。すなわち、
再構成と
Fx 3.0
へのポート、環境変数関係の関数、このマニュアルページは
An Mike Smith Aq msmith@FreeBSD.org
が作成しました。
索引
Index
- 名称
-
- 書式
-
- 解説
-
- 文字列関数
-
- メモリアロケーション
-
- 環境
-
- 標準ライブラリサポート
-
- キャラクタ I/O
-
- 文字テストと変換
-
- ファイル入出力
-
- ページャ
-
- その他
-
- 低レベルサポートの要求
-
- 内部ファイルシステム
-
- デバイス
-
- バグ
-
- 歴史
-
Time: 07:06:57 GMT, January 12, 2009