aboutsummaryrefslogblamecommitdiff
path: root/ja_JP.eucJP/man/man3/libstand.3
blob: 2da1ca34e236b6afb771364367b4ababb474f6db (plain) (tree)
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500























                                                                                                                          
                                                              
   
             
























































































































































































































































































































































































































































































                                                                                                                      
.\" Copyright (c) Michael Smith
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR Ohttp://wafu.netgate.net/tama/unix/indexe.htmlTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"	%Id: libstand.3,v 1.3 1998/11/04 07:39:53 msmith Exp %
.\"
.\" $FreeBSD$
.Dd June 22, 1998
.Dt LIBSTAND 3
.Os FreeBSD 3.0
.Sh 名称
.Nm libstand
.Nd スタンドアローン実行用サポートライブラリ
.Sh 書式
.Fd #include <stand.h>
.Sh 解説
.Nm libstand
は、スタンドアローンアプリケーションのサポート関数群と、
標準 BSD プログラミングが可能な模擬環境を備えています。
後のセクションでこれらの関数を種類分けしています。
ここに明確な定義がない場合は、指定の関数のセクション 3 の
マニュアルページの該当個所を参照して下さい。
.Sh 文字列関数
使用できる文字列関数は、
.Xr string 3
および
.Xr bstring 3
に書かれています。
.Sh メモリアロケーション
.Bl -hang -width 10n
.It Fn "void *malloc" "size_t size"
.Pp
.Fa size
で指定した大きさのメモリを最適なアルゴリズムでヒープ領域から割り
当てます。
.It Fn "void free" "void *ptr"
.Pp
.Fa ptr
に割り当てられたオブジェクトを解放します。
.It Fn "void setheap" "void *start" "void *limit"
.Pp
ヒープ領域を初期化します。この関数は、
.Fn alloc
を最初に呼び出す前に実行しなければなりません。
.Fa start
と
.Fa limit
の間の領域がヒープ領域に使用されます。
これを越えて割り当てようとすると panic となります。
.It Fn "char *sbrk" "int junk"
.Pp
.Fn sbrk 0
の性質を与えます。すなわちヒープ領域の最高位アドレスのポインタを
返します。この戻り値は、テスト時にヒープの実使用状況を判断するのに
使用できます。引数
.Fa junk
は無視されます。
.El
.Sh 環境
伝統的なシェルサポート環境にと同様、フラットな変数空間操作のために
一群の関数が備わっています。主な拡張として、フック関数の設定/設定解除の
ためのサポートがあります。
.Bl -hang -width 10n
.It Fn "char *getenv" "const char *name"
.It Fn "int setenv" "const char *name" "char *value" "int overwrite"
.It Fn "int putenv" "const char *string"
.It Fn "int unsetenv" "const char *name"
.Pp
これらの関数は、標準ライブラリと類似の動作をします。
.It Fn "struct env_var *env_getenv" "const char *name"
.Pp
その環境内での変数を検索し、すべてのデータ構造を返します。
.It Fn "int env_setenv" "const char *name" "int flags" "char *value" "ev_sethook_t sethook" "ev_unsethook_t unsethook"
.Pp
.Fa name
という環境変数の新規作成または既存環境変数の設定を行います。
新規変数を生成する場合は、引数
.Fa sethook
および
.Fa unsethook
を指定することができます。
.Pp
EV_NOHOOK フラグが設定されていなければ、変数設定をしようとするとすると、
フックの設定が必ず起動されます。通常、引数
.Fa value
の確認を行ない、実際に値を保存するために EV_NOHOOK 変数をつけて、再度
.Fn env_setenv
呼び出しを行い設定します。すべての変数設定を拒否するために、定義済み関数
.Fn env_noset
を指定することができます。
.Pp
設定解除フックは、変数の設定解除が行われるときに起動されます。
戻り値が 0 のとき、変数の設定解除されています。定義済み関数
.Fa env_nounset
は、変数設定解除を抑制するのに使用します。
.El
.Sh 標準ライブラリサポート
.Bl -hang -width 10n
.It Fn "int getopt" "int argc" "char * const *argv" "cont char *optstring"
.It Fn "long strtol" "const char *nptr" "char **endptr" "int base"
.It Fn "void srandom" "unsigned long seed"
.It Fn "unsigned long random" "void"
.It Fn "char *strerror" "int error"
.Pp
.Nm libstand
でサポートされている errno のサブセット値に対応する
エラーメッセージを返します。
.It Fn "assert" "expression"
.Pp
.Fd #include <assert.h>
行が必要です。
.It Fn "int setjmp" "jmp_buf env"
.It Fn "void longjmp" "jmp_buf env" "int val"
.Pp
操作できるシグナル状態がないため、それぞれ
.Fn _setjmp
および
.Fn _lonjmp
として定義されています。
.Fd #include <setjmp.h>
行が必要です。
.El
.Sh キャラクタ I/O
.Bl -hang -width 10n
.It Fn "void gets" "char *buf"
.Pp
キャラクタをコンソールから
.Fa buf
に読み込みます。標準的な注意事項が本関数に
対して適用されます。
.It Fn "void ngets" "char *buf" "size_t size"
.Pp
.Fa size
-1 またはそれ以下の文字をコンソールから
.Fa buf
に読み込みます。行末文字は削除され、
バッファは常にヌルが終端文字になります。
.Fa size
が 1 以下の場合、関数は
.Fn gets
と同じ動作をします。
.It Fn "int fgetstr" "char *buf" "int size" "int fd"
.Pp
一行を
.Fa size
文字以下の範囲で
.Fa buf
に読み込みます。行末のキャラクタは切り捨てられ、
バッファは常にヌルが終端となります。
正常終了のときは
.Fa buf
内の文字数を返し、読み込みエラーのときは -1 を返します。
.It Fn "int printf" "const char *fmt" "..."
.It Fn "void vprintf" "const char *fmt" "va_list ap"
.It Fn "int sprintf" "char *buf" "const char *fmt" "..."
.It Fn "void vsprintf" "char *buf" "const char *fmt" "va_list ap"
.Pp
*printf 関数は、標準
.Fn printf
ファミリのサブセット機能といくつかの拡張機能を備えています。
c,d,n,o,p,s,u,x の標準変換がサポートされています。
+,-,#,*,0, field width,precision,l の修飾子がサポートされています。
.Pp
エラーレジスタをデコードするために
.Li b
変換が備わっています。
使い方は以下の通りです。
.Pp
.Bd -offset indent
printf( 
.Qq reg=%b\en , 
regval, 
.Qq <base><arg>*
);
.Ed

.Aq Pa base
は、制御キャラクタの出力を表現しています。例えば
\e10 は 10 進数を、\e20 は 16 進数を意味します。各
.Aq Pa arg
は、文字列で、最初の一文字は引数のビット数(始めが1)で、
ビットが設定されている場合、それ以降の文字列(32文字未満)は表示対象の
テキストです。つまり、
.Pp
.Bd -offset indent
printf(
.Qq reg=%b\en
3
.Qq \e10\e2BITTWO\e1BITONE\en
);
.Ed

により出力表示されます。
.Pp
.Bd -offset indent
reg=3<BITTWO,BITONE>
.Ed
.Pp
.Li D
変換は、16 進数ダンプの機能を備えています。
たとえば、以下。
.Pp
.Bd -offset indent -literal
printf(
.Qq %6D ,
ptr,
.Qq \:
);  gives  
.Qq XX:XX:XX:XX:XX:XX
.Ed
.Bd -offset indent -literal
printf(
.Qq %*D ,
len,
ptr,
.Qq "\ "
);  gives  
.Qq XX XX XX ...
.Ed
.El

.Pp
.Sh 文字テストと変換
.Bl -hang -width 10n
.It Fn "int isupper" "int c"
.It Fn "int islower" "int c"
.It Fn "int isspace" "int c"
.It Fn "int isdigit" "int c"
.It Fn "int isxdigit" "int c"
.It Fn "int isascii" "int c"
.It Fn "int isalpha" "int c"
.It Fn "int toupper" "int c"
.It Fn "int tolower" "int c"
.El
.Sh ファイル入出力
.Bl -hang -width 10n
.It Fn "int open" "const char *path" "int flags"
.Pp
.Xr open 2
の動作に似ています。ただし、ファイル作成機能がサポート
されていないため、モードパラメータは不要です。引数
.Fa flags
には、O_RDONLY, O_WRONLY, O_RDWR のどれかを指定できます。
(たとえ、現在書込みをサポートするファイルシステムが無いとしても)
.It Fn "int close" "int fd"
.It Fn "void closeall" "void"
.Pp
すべての open されているファイルを閉じます。
.It Fn "ssize_t read" "int fd" "void *buf" "size_t len"
.It Fn "ssize_t write" "int fd" "void *buf" "size_t len"
.Pp
(現在書き込みをサポートしていあるファイルシステムはありません)
.It Fn "off_t lseek" "int fd" "off_t offset" "int whence"
.Pp
読み込みの最中に自動的に解凍されるファイルは、現在の位置から後方に
seek することはできません。
.It Fn "int stat" "const char *path" "struct stat *sb"
.It Fn "int fstat" "int fd" "struct stat *sb"
.Pp
関数
.Fn stat
および
.Fn fstat
は、
.Fa sb
構造体のフィールド : st_mode, st_nlink,st_uid,st_gid,st_size
への書き込みだけをします。
.Nm tftp
ファイルシステムでは、この関数の呼び出しは
意味のある値になりません。また
.Nm cd9660
ファイルシステムは、ファイルの uid/gid が常に 0 であると
報告して来ます。
.El
.Sh ページャ
.Nm libstand
は簡単な内部ページャを提供し、大きなコマンドの出力を読みやすくします。
.Bl -hang -width 10n
.It Fn "void pager_open"
.Pp
ページャを初期化し、次の出力行が表示装置の先頭であることを知らせます。
環境変数 LINES は、一度に表示可能な行数を決める際に参照されます。
.It Fn "void pager_close" "void"
.Pp
ページャを閉じます
.It Fn "void pager_output" "char *lines"
.Pp
.Fa lines
で指定された、ヌルで終了するバッファーの行がページャに送られます。
改行文字を数えることで、出力される行数が決まります。
(折り返しは含みません)
すべての行が出力されると、
.Fn pager_output
は 0 を返します。画面表示が停止し、ユーザが途中終了を
選択したときは 0 以外の値を返します。
.It Fn "int pager_file" "char *fname"
.Pp
ファイル
.Fa fname
を開き、画面表示します。エラーのときは
-1 を返し、EOF のときは 0 を、ユーザが読み込みを途中終了する場合は
1 を返します。
.El
.Sh その他
.Bl -hang -width 10n
.It Fn "void twiddle" "void"
.Pp
連続呼び出しの場合、ユーザが確認できるように、
文字列 |,/,-,\\ の後にバックスペースを付けて出力します。
.El
.Sh 低レベルサポートの要求
スタック、ヒープ、コンソール、デバイスは、
.Nm libstand
でよく使われるリソースです。
.Pp
スタックは、
.Nm libstand
関数が起動される前に構築する必要があります。
スタック要求は、関数や使われているファイルシステム、および、後で詳述する
サポートレイヤ関数によって変化します。
.Pp
ヒープは、
.Fn alloc
関数や
.Fn open
関数の呼び出しの前に、
.Fn setheap
呼び出しを行なって構築しなければなりません。ヒープの使用法は、クライアントの
動作と同様、同時に open するファイルの数によって変化します。自動解凍をす
ると、ファイルを open する度に 64K 以上のデータが割り当てられます。
.Pp
コンソールアクセスは、後述の関数
.Fn getchar  ,
.Fn putchar ,
.Fn ischar
によって行われます。
.Pp
デバイスアクセスは
.Fn devopen
によって初期化され、
.Fn devopen
が返すデバイススイッチ構造体の関数
.Fn dv_strategy ,
.Fn dv_ioctl ,
.Fn dv_close
によって実行されます。
.Pp
ユーザは次のサポート関数を用意する必要があります。
.Bl -hang -width 10n
.It Fn "int getchar" "void"
.Pp
コンソールから、関数
.Fn gets  ,
.Fn ngets
やページャ関数によって使われる文字を返します。
.It Fn "int ischar" "void"
.Pp
コンソールから入力待ちの状態のとき、0 でない値を返します。
.It Fn "void putchar" "int"
.Pp
コンソールに、
.Fn gets ,
.Fn ngets ,
.Fn *printf ,
.Fn panic ,
.Fn twiddle
および
他の多くのデバッグ、情報通知用の関数が使用する文字を書き出します。
.It Fn "int devopen" "struct open_file *of" "const char *name" "char **file"
.Pp
.Fa name
という名前のファイル用の適当なデバイスを開き、デバイスを参照しない
ファイルの残りの部分の
.Fa name
を指すポインタを、
.Fa file
に返します。
.Fa of
の構造体フィールド
.Va f_dev
は、正常終了した場合、open したデバイスの
.Dv devsw
構造体を指すようにセットされます。
デバイス識別子は、常にパス構成の先頭に来る
必要がありますが、それ以外は自由にフォーマットされています。
.Fn open
や
デバイス関連の I/O で使用されます。
.It Fn "int devclose" "struct open_file *of"
.Fa of
に割り当てられたデバイスを閉じます。
デバイスドライバー自身はクローズ処理のためにすでに呼び出しが行われており、
この呼び出しは、
.Fn devopen
による割り当てを解除するだけです。
.It Fn "void panic" "const char *msg" "..."
.Pp
致命的で回復不能なエラー状態を通知します。引数
.Fa msg ...
は、
.Fn printf
のものと同様です。
.El
.Sh 内部ファイルシステム
内部ファイルシステムでは、
.Dv struct fs_ops *file_system[], which should be initialised with pointers
の構造体の配列を、ユーザ
がエクスポートでき、配列は構造体
.Dv struct fs_ops
へのポインタで初期化されます。
以下のファイルシステムハンドラが
.Nm libstand
に
備わっていますが、ユーザは自分で別のファイルシステムを
提供することができます。
.Bl -hang -width "cd9660_fsops "
.It ufs_fsops
BSD の UFS
.It tftp_fsops
TFTP 経由のファイルアクセス
.It nfs_fsops
NFS 経由のファイルアクセス
.It cd9660_fsops
ISO 9660 (CD-ROM) ファイルシステム
.It zipfs_fsops
ファイルをサポートしているファイルシステムの
gzip されたファイルをサポートするスタック
されたファイルシステムで、zipfs ファイルシステムを使おうとすると、
.Nm libstand
はファイル名の後に
.Li .gz 
を付加し、更に別のファイルシステムを使用してファイルの位置を決めます。
このファイルシステムの、配列
.Dv file_system[]
での配置によって、
non-gzipped ファイルを参照している gzipped ファイルが
open されるかどうかが決められます。
gzip されたファイルは前方へ seek することだけができ、gzip されたファイルへの
.Fn stat
および
.Fn fstat
は、長さの不正を報告します。
.El
.Pp
構造体
.Dv struct fs_ops
のポインタ配列はヌルで終了しなければなりません。
.Sh デバイス
デバイスは、ヌルで終了するデバイススイッチ構造体のポインタ配列である、 
.Dv struct devsw *devsw[]
経由のサポートコードによってエクスポートされます。
.Sh バグ
詳細なメモリ使用データがないのは不親切です。
.Pp
.Sh 歴史
.Nm libstand
は多くのソースを利用しています。すなわち、
.Bl -bullet -compact
.It 
.Nx
からの
.Nm libsa
.It
.Fx 3.0
からの
.Nm libc
と
.Nm libkern
.It
.An Matthew Dillon Aq dillon@backplane.com
からの
.Nm zalloc
.El
.Pp
再構成と
.Fx 3.0
へのポート、環境変数関係の関数、このマニュアルページは
.An Mike Smith Aq msmith@freebsd.org
が作成しました。