日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
LIBSTAND(3) FreeBSD ライブラリ関数マニュアル LIBSTAND(3) 名称 libstand -- スタンドアローン (独立型) 実行形式のためのサポートライブラリ 書式 #include <stand.h> 解説 libstand ライブラリは、標準の BSD プログラミング環境を可能であれば模擬す る、スタンドアローンのアプリケーションのためのサポートする 1 組の関数を提 供しています。次のセクションは、種類によって、これらの関数をグループ化し ます。特にここで記述されないなら、与えられた関数のための対応するセクショ ン 3 のマニュアルページを参照してください。 文字列関数 文字列関数は、string(3) と bstring(3) で文書化されるように利用可能です。 メモリ割り付け void * malloc(size_t size) best-fit アルゴリズムを使用してヒープ (領域) から size バイト のメモリを割り付けます。 void free(void *ptr) ptr で割り付けられたオブジェクトを解放します。 void setheap(void *start, void *limit) ヒープを初期化します。この関数は、始めて alloc() を呼び出す前 に呼び出されなければなりません。start と limit の間の領域は、 ヒープのためにに使用されます。これを越えて割り付ける試みは、 panic の結果となります。 char * sbrk(int junk) sbrk(0) の振る舞いを提供します、すなわち、ヒープが到達した最 高のポイント (最高のアドレス) を返します。この値は、実際の ヒープの使用を判断するためにテストするために使用することがで きます。junk 引数は、無視されます。 環境変数 一連の関数は、伝統的なシェルでサポートされた環境変数に似たフラットな変数 空間を操作するために提供されています。主な増強は、フック関数を設定/設定解 除のためのサポートです。 char * getenv(const char *name) int setenv(const char *name, const char *value, int overwrite) int putenv(char *string) int unsetenv(const char *name) これらの関数は、それらの標準ライブラリに相当するものと同様に 振る舞います。 struct env_var * env_getenv(const char *name) 環境変数中の変数を検索し、そのすべてのデータ構造を返します。 int env_setenv(const char *name, int flags, const void *value, ev_sethook_t sethook, ev_unsethook_t unsethook) name と呼ばれる環境変数を新しく作成するか、または既存の環境変 数を設定します。新しい変数を作成するなら、sethook と unsethook 引数が指定されます。 EV_NOHOOK フラグが設定されていないなら、変数を設定する試みが 行われるときはいつでも、フックの設定が、呼び出されます。通 常、フックの設定は、value 引数を正当であると確認し、次に、実 際に値を保存するために、再び EV_NOHOOK 設定で env_setenv() を 呼び出します。前もって定義された関数 env_noset() は、変数を設 定するすべての試みを拒否すると指定されます。 フックを未設定とすることは、変数を未設定とする試みが行われる とき、呼び出されます。それが、0 を返すなら、変数は、未設定と されます。前もって設定された関数 env_nounset は、未設定とされ ている変数を防ぐために使用されます。 標準ライブラリサポート int getopt(int argc, char * const *argv, const char *optstring) long strtol(const char *nptr, char **endptr, int base) void srandom(unsigned long seed) long random(void) char * strerror(int error) libstand によってサポートされた errno 値のサブセットのための エラーメッセージを返します。 assert(expression) <assert.h> を必要とします。 int setjmp(jmp_buf env) void longjmp(jmp_buf env, int val) 操作するシグナル状態がないので、それぞれ _setjmp() と _longjmp() として定義します。<setjmp.h> を必要とします。 文字 I/O (入出力) void gets(char *buf) コンソールから buf に文字を読み込みます。標準の注意のすべて が、この関数に当てはまります。 void ngets(char *buf, int size) コンソールから buf に、おおくても size - 1 文字を読み込みま す。size が 1 未満であるなら、関数の振る舞いは、gets() と同じ です。 int fgetstr(char *buf, int size, int fd) 1 行をおおくても size 文字 buf に読み込みます。行を終了する文 字は、取り除かれ、バッファは、常にヌル文字で終了します。成功 するなら、buf 中の文字の数を返し、読み込みエラーが生じるな ら、-1 を返します。 int printf(const char *fmt, ...) void vprintf(const char *fmt, va_list ap) int sprintf(char *buf, const char *fmt, ...) void vsprintf(char *buf, const char *fmt, va_list ap) *printf 関数は、標準の printf() ファミリ機能といくつかの拡張 のサブセットを実装しています。次の標準の変換がサポートされて ます: c,d,n,o,p,s,u,x。次の修飾子がサポートされています: +,-,#,*,0,フィールド幅,制度,l。 b 変換は、エラーレジスタをデコード (解読) するために提供され ています。その使用法は、次の通りです: printf( "reg=%b\n", regval, "<base><arg>*" ); ここで、<base> は、制御文字として表現された出力です、例えば、 \10 は、8 進数を、\20 は、16 進数を与えます。その最初は、検査 される (1 を基点とする) ビット番号を与え、次の文字 (32 未満の 文字まで) は、ビットが設定されているなら、表示されるテキスト を与える、各 <arg> は、文字のシーケンスです。したがって、 printf( "reg=%b\n", 3, "\10\2BITTWO\1BITONE" ); は、次の出力を与えます。 reg=3<BITTWO,BITONE> D 変換は、16 進数ダンプの機能を提供します、例えば、 printf( "%6D", ptr, ":" ); は、"XX:XX:XX:XX:XX:XX" とな ります。 printf( "%*D", len, ptr, " " ); は、"XX XX XX ..." とな ります。 文字テストと変換 int isupper(int c) int islower(int c) int isspace(int c) int isdigit(int c) int isxdigit(int c) int isascii(int c) int isalpha(int c) int toupper(int c) int tolower(int c) ファイル I/O (入出力) int open(const char *path, int flags) ファイルの作成がサポートされてないので、モードパラメータが、 必要ではないことを除いて、open(2) で指定されるような振る舞い に似ています。flags 引数は、(ファイルシステムが、現在書き込み をサポートしていませんが) O_RDONLY、O_WRONLY と O_RDWR の 1 つです。 int close(int fd) void closeall(void) すべてのオープンしているファイルをクローズします。 ssize_t read(int fd, void *buf, size_t len) ssize_t write(int fd, void *buf, size_t len) (ファイルシステムは、現在書き込みをサポートしていません。) off_t lseek(int fd, off_t offset, int whence) 読み込みの間に自動的に圧縮復元されているファイルは、現在の時 点から後方にシークすることはできません。 int stat(const char *path, struct stat *sb) int fstat(int fd, struct stat *sb) stat() と fstat() 関数は、sb 構造体の次のフィールドのみを書き 込みます: st_mode,st_nlink,st_uid,st_gid,st_size。tftp ファイ ルシステムは、この呼び出しのための意味のある値を提供できず、 cd9660 ファイルシステムは、常に、0 の uid/gid があるファイル を報告します。 ページャ libstand ライブラリは、大きなコマンドの出力を読むことを容易にするために簡 単な内部のページャを供給します。 void pager_open() ページャを初期化し、次の行の出力が表示の先頭になるように、 ページャに伝えます。環境変数 LINES は、一時停止の前に表示され る行の数を決定するために調べられます。 void pager_close(void) ページャをクローズします。 int pager_output(const char *lines) lines でヌル文字で終了するバッファの行をページャに送ります。 改行文字は、出力される行の数を決定するためにカウントされます (折り返された行は、含まれません)。pager_output() 関数は、行の すべてが出力されたとき、0 を返し、表示が一時停止し、ユーザ が、終了を選ぶなら、0 以外を返します。 int pager_file(const char *fname) ファイル fname. をオープンし、表示を試みます。エラーであれ ば、-1 を返し、EOF で、0 を返し、ユーザが、読んでいる間に終了 を選んだなら、1 を返します。 その他 void twiddle(void) 連続した呼び出しは、ユーザに安心を提供するために、バックス ペースが続くシーケンス |,/,-,\ の文字を出力します。 要求される低レベルのサポート 次のリソースは、libstand によって消費されます - スタック、ヒープ、コン ソール、とデバイス。 スタックは、libstand 関数が呼び出される前に、構築されなければなりません。 スタックの要件は、関数と消費者によって使用されるファイルシステム、以下に 述べられるサポートレイヤ関数に依存して変わます。 ヒーブは、setheap() を呼び出すことによって、alloc() または open() を呼び 出す前に、構築されなければなりません。ヒープの使用法は、クライアントの振 る舞いと同様に、同時にオープンするファイルの数に依存して変わります。自動 的な圧縮復元は、オープンしているファイルごとに 64K を超えるデータが割り付 けられます。 コンソールのアクセスは、以下に述べられる getchar(), putchar() と ischar() 関数を通して実行されます。 デバイスのアクセスは、devopen() を通して初期化され、devopen() が返すデバ イススイッチ構造体の dv_strategy(), dv_ioctl() と dv_close() 関数を通して 実行されます。 消費者は、次のサポート関数を提供しなければなりません: int getchar(void) gets(), ngets() とページャ関数によって使用される、コンソール から文字を読み込みます。 int ischar(void) コンソールから文字を待っているなら、0 以外を返します。 void putchar(int) gets(), ngets(), *printf(), panic() と twiddle() によって使用 される、したがって、デバッグと情報の出力のための他の多くの関 数によって使用される、コンソールに文字を書き込みます。 int devopen(struct open_file *of, const char *name, const char **file) デバイスを参照しない name の残りの本体へのポインタ file に返 して、name で指定されたファイルのために適切なデバイスをオープ ンします。of の f_dev フィールドは、成功するなら、オープンさ れたデバイスのための devsw 構造体を指すように設定されます。デ バイス識別子は、常にパスの構成要素に先行しなければなりません が、そうでなければ、任意に書式化されます。open() によって使用 され、したがって、すべてのデバイス関連の I/O によって使用され ます。 int devclose(struct open_file *of) of のために割り付けられたデバイスをクローズします。デバイスド ライバそれ自体は、既に、クローズのために呼び出されています。 この呼び出しは、devopen のみによって行われたあらゆる割り付け をクリーンアップするべきです。 void panic(const char *msg, ...) 致命的で、回復不能なエラー条件のシグナルを起こします。msg ... 引数は、printf() と同様です。 内部のファイルシステム 内部のファイルシステムは、struct fs_ops 構造体へのポインタで初期化される べきである、配列 struct fs_ops *file_system[] をエクスポートしている消費 者によって有効にされます。次のファイルシステムのハンドラは、libstand に よって供給され、消費者は、彼ら自身の他のファイルシステムを供給します: ufs_fsops BSD UFS。 ext2fs_fsops Linux ext2fs ファイルシステム。 tftp_fsops TFTP を経由するファイルのアクセス。 nfs_fsops NFS を経由するファイルのアクセス。 cd9660_fsops ISO 9660 (CD-ROM) ファイルシステム。 gzipfs_fsops gzip されたファイルをサポートしているスタックされたファイル システム。gzipfs ファイルシステムを試みるとき、libstand は、ファイル名の終わりに .gz を付け加え、次に、他のファイル システムを使用してファイルを見つけることを試みます。 file_system[] 配列のこのファイルシステムの配置は、gzip され たファイルが gzip されないファイルに優先してオープンされる かどうか決定されます。gzip されたファイルを前方にシークする ことだけが可能で、gzip されたファイルの stat() と fstat() は、無効の長さを報告します。 bzipfs_fsops gzipfs_fsops と同様ですが、bzip2 で圧縮されたファイルに対し てです。 struct fs_ops ポインタの配列は、NULL で終了されるべきです。 デバイス デバイスは、デバイススイッチ構造体へのポインタの NULL で終了する配列であ る、配列 struct devsw *devsw[] を通してサポートされているコードによってに エクスポートされます。 歴史 libstand ライブラリは、次のものを含めて、多くのソースからの寄贈を含んでい ます: • NetBSD から libsa • FreeBSD 3.0 から libc と libkern • Matthew Dillon <dillon@backplane.com> から zalloc 再構成と FreeBSD 3.0 への移植、環境関数とこのマニュアルページは、Mike Smith <msmith@FreeBSD.org> によって書かれました。 バグ 詳細なメモリ利用データの不足は、助けになりません。 FreeBSD 11.4 August 6, 2004 FreeBSD 11.4