diff --git a/ja_JP.eucJP/man/man2/clock_gettime.2 b/ja_JP.eucJP/man/man2/clock_gettime.2 index a0aede308d..d4db861607 100644 --- a/ja_JP.eucJP/man/man2/clock_gettime.2 +++ b/ja_JP.eucJP/man/man2/clock_gettime.2 @@ -1,134 +1,135 @@ .\" $OpenBSD: clock_gettime.2,v 1.4 1997/05/08 20:21:16 kstailey Exp $ .\" .\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. 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. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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 OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %FreeBSD: src/lib/libc/sys/clock_gettime.2,v 1.15 2003/02/05 09:17:32 tjr Exp % .\" $FreeBSD$ .\" .Dd February 5, 2003 .Dt CLOCK_GETTIME 2 .Os .Sh 名称 .Nm clock_gettime , .Nm clock_settime , .Nm clock_getres .Nd 日付と時刻の取得/設定/精度の取得をする .Sh ライブラリ .Lb libc .Sh 書式 .In sys/time.h .Ft int .Fn clock_gettime "clockid_t clock_id" "struct timespec *tp" .Ft int .Fn clock_settime "clockid_t clock_id" "const struct timespec *tp" .Ft int .Fn clock_getres "clockid_t clock_id" "struct timespec *tp" .Sh 解説 .Fn clock_gettime と .Fn clock_settime は .Fa clock_id で指定するクロックの値を取得、設定します。 .Pp .Fa clock_id 引数には、次の 3 つの値のうちの 1 つを指定します。 CLOCK_REALTIME は普通の時計のように進む時間、 +CLOCK_MONOTONIC は SI 単位系の秒で進む時間、 CLOCK_VIRTUAL は呼び出しプロセスのために CPU がユーザモードで 実行されているときにだけ進む時間、 CLOCK_PROF は、CPU がユーザモードまたはカーネルモードで実行されている ときに進む時間です。 .Pp .Fa tp によって指される構造体は .Ao Pa sys/time.h Ac 内で次のように定義されています。 .Pp .Bd -literal struct timespec { time_t tv_sec; /* 秒 */ long tv_nsec; /* ナノ秒 */ }; .Ed .Pp 時刻を設定できるのはスーパユーザだけです。 システムの安全性レベル (securelevel) が 1 より大きい場合 .Pf ( Xr init 8 を参照)、 時間は進めることだけができます。この制限は、 悪意のあるスーパユーザがファイルに 任意のタイムスタンプを設定するのを防止するためのものです。 しかし、システムが安全なモードの時でも、 .Xr adjtime 2 システムコールを使用すれば システム時間を遅らせることができてしまいます。 .Pp クロックの精度 (細かさ) は、 .Fn clock_getres システムコールによって返されます。この値は、 (非 NULL ポインタ) .Fa *tp 内に格納されます。 .Sh 戻り値 .Rv -std .Sh エラー 次のエラーコードが .Va errno に設定されます: .Bl -tag -width Er .It Bq Er EINVAL .Fa clock_id 引数が有効な値ではありませんでした。 .It Bq Er EFAULT .Fa *tp 引数アドレスが無効なメモリを参照しています。 .It Bq Er EPERM スーパユーザ以外のユーザが時刻を設定しようとしました。 .El .Sh 関連項目 .Xr date 1 , .Xr adjtime 2 , .Xr ctime 3 , .Xr timed 8 .Sh 規格 .Fn clock_gettime , .Fn clock_settime および .Fn clock_getres システムコールは .St -p1003.1b-93 に適合しています。 .Sh バグ .Dv CLOCK_VIRTUAL および .Dv CLOCK_PROF タイマは未だ実装されていません。 diff --git a/ja_JP.eucJP/man/man2/mincore.2 b/ja_JP.eucJP/man/man2/mincore.2 index 810cd66d5e..3f344ac9cb 100644 --- a/ja_JP.eucJP/man/man2/mincore.2 +++ b/ja_JP.eucJP/man/man2/mincore.2 @@ -1,114 +1,114 @@ .\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. 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. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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 OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)mincore.2 8.1 (Berkeley) 6/9/93 -.\" %FreeBSD: src/lib/libc/sys/mincore.2,v 1.22 2003/01/17 04:06:57 tjr Exp % +.\" %FreeBSD: src/lib/libc/sys/mincore.2,v 1.23 2003/02/23 01:47:47 ru Exp % .\" .\" $FreeBSD$ .Dd January 17, 2003 .Dt MINCORE 2 .Os .Sh 名称 .Nm mincore .Nd メモリページの常駐の決定 .Sh ライブラリ .Lb libc .Sh 書式 .In sys/mman.h .Ft int .Fn mincore "const void *addr" "size_t len" "char *vec" .Sh 解説 .Fn mincore システムコールは、 .Fa addr で始まり .Fa len バイト続く領域の中の個々のページが常駐しているかどうかを、決定します。 .\"開始アドレス .\".Fa addr .\"は、はじめに複数のページサイズに切り捨てられます .\".Xr ( getpagesize 3 .\"参照)。 .\"終了アドレス .\".Fa addr No + Fa len .\"は、複数のページサイズに切り上げられます。 その状態はページあたり 1 文字の .Fa vec 配列の中に返されます。 個々の文字は、そのページが常駐していなければ 0 または、以下の -.Sy ( +.Aq ( Pa sys/mman.h で定義されている) フラグの組み合わせです: .Bl -tag -width ".Dv MINCORE_REFERENCED_OTHER" .It Dv MINCORE_INCORE ページはコア内にあります (常駐)。 .It Dv MINCORE_REFERENCED ページは我々に参照されました。 .It Dv MINCORE_MODIFIED ページは我々に変更されました。 .It Dv MINCORE_REFERENCED_OTHER ページは参照されました。 .It Dv MINCORE_MODIFIED_OTHER ページは変更されました。 .El .Pp .Fn mincore -によって返される情報は、この関数が戻る時間のために +によって返される情報は、このシステムコールが戻る時間のために 古くなっているかもしれません。 あるページが常駐することを保証する唯一の方法は、そのページを .Xr mlock 2 -関数でメモリにロックすることです。 +システムコールでメモリにロックすることです。 .Sh 戻り値 .Rv -std mincore .Sh エラー .Fn mincore -関数は次の場合に失敗します: +システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er EINVAL .Fa addr 引数と .Fa len 引数によって指定された仮想アドレス範囲が有効ではありません。 .It Bq Er EFAULT .Fa vec 引数が正しくないアドレスを指しています。 .El .Sh 関連項目 .Xr madvise 2 , .Xr mlock 2 , .Xr mprotect 2 , .Xr msync 2 , .Xr munmap 2 , .Xr getpagesize 3 .Sh 歴史 .Fn mincore システムコールは .Bx 4.4 ではじめて登場しました。 diff --git a/ja_JP.eucJP/man/man2/mount.2 b/ja_JP.eucJP/man/man2/mount.2 index 97e706dd88..6abadd7905 100644 --- a/ja_JP.eucJP/man/man2/mount.2 +++ b/ja_JP.eucJP/man/man2/mount.2 @@ -1,300 +1,301 @@ .\" Copyright (c) 1980, 1989, 1993 .\" The Regents of the University of California. 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. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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 OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)mount.2 8.3 (Berkeley) 5/24/95 -.\" %FreeBSD: src/lib/libc/sys/mount.2,v 1.33 2003/01/13 19:42:21 joerg Exp % +.\" %FreeBSD: src/lib/libc/sys/mount.2,v 1.34 2003/02/23 01:47:47 ru Exp % .\" .\" $FreeBSD$ .Dd May 24, 1995 .Dt MOUNT 2 .Os .Sh 名称 .Nm mount , .Nm unmount .Nd ファイルシステムをマウントまたはマウント解除する .Sh ライブラリ .Lb libc .Sh 書式 .In sys/param.h .In sys/mount.h .Ft int .Fn mount "const char *type" "const char *dir" "int flags" "void *data" .Ft int .Fn unmount "const char *dir" "int flags" .Sh 解説 .Fn mount システムコールは、ファイルシステムオブジェクトをシステムファイルツリーの マウントポイント .Fa dir に付けます。 引数 .Fa data はマウントされるファイルシステムオブジェクトを記述します。 引数 .Fa type は .Fa data をどのように解釈するかをカーネルに通知します (後述の .Fa type を参照)。 ファイルシステムの内容は、新しいマウントポイント .Fa dir を通して利用できるようになります。 マウントが成功すると .Fa dir にあるすべてのファイルが覆い隠された状態になり、 ファイルシステムがマウント解除されるまで利用できなくなります。 .Pp デフォルトではスーパユーザのみが .Fn mount -関数を呼び出すことができます。 -この制約は sysctl の +システムコールを呼び出すことができます。 +この制約は +.Xr sysctl 8 +の .Em vfs.usermount -を 0 ではない値に設定することで解除することが可能です。 +変数を 0 ではない値に設定することで解除することが可能です。 .Pp 次の .Fa flags は、ファイルシステムアクセスに影響のあるデフォルト値を抑制するように 指定できます。 .Bl -tag -width MNT_SYNCHRONOUS .It Dv MNT_RDONLY ファイルシステムを読取り専用として取り扱います。 スーパユーザでさえこれに書き込むことはできません。 このオプションなしに MNT_UPDATE を指定すると、 読取り専用ファイルシステムが読取り / 書込みにアップグレードされます。 .It Dv MNT_NOEXEC そのファイルシステムからファイルを実行できないようにします。 .It Dv MNT_NOSUID 実行するときに、ファイルについての setuid ビットまたは setgid ビットを 尊重しません。 このフラグは、呼び出し側がスーパユーザでないときに、自動的に設定されます。 .It Dv MNT_NOATIME ファイルアクセス時刻の更新を行いません。 .It Dv MNT_NODEV ファイルシステム上の特殊ファイルを解釈しません。 このフラグは、呼び出し側がスーパユーザでないときに、自動的に設定されます。 .It Dv MNT_SUIDDIR SUID ビットが設定されたディレクトリは、新しいファイルの所有者を ディレクトリと同じに設定します。 .It Dv MNT_SYNCHRONOUS ファイルシステムへの入出力はすべて同期的に行われます。 .It Dv MNT_ASYNC ファイルシステムへの入出力はすべて非同期的に行われます。 .It Dv MNT_FORCE ファイルシステムがクリーンでないように見えても、読み書き可でマウントを 強行します。 危険です。 .It Dv MNT_NOCLUSTERR クラスタ読取りを無効にします。 .It Dv MNT_NOCLUSTERW クラスタ書込みを無効にします。 .El .Pp フラグ .Dv MNT_UPDATE は、マウントコマンドがすでにマウントされたファイルシステムに 適用されていることを示します。 これによって、ファイルシステムをマウント解除および再マウントする必要なしに、 マウントフラグを変更できます。 ファイルシステムによっては、すべてのフラグの変更を許容しない場合もあります。 たとえば多くのファイルシステムが、 読み書き可から読取り専用への変更を許容しません。 .Pp vfs サブシステムは、フラグ .Dv MNT_RELOAD によってすでにマウントされているファイルシステムに 関係するデータ構造体を更新します。 .Pp .Fa type 引数でファイルシステムを指定します。 システム上で既知なファイルシステムのタイプは .Xr lsvfs 1 で得ることができます。 .Pp .Fa data 引数は、マウントするタイプに固有の引数が入った構造体を指すポインタです。 これらの引数構造体についての形式は各ファイルシステムに ついてのマニュアルページに記載されています。 慣習によりファイルシステムのマニュアルページは、 .Xr lsvfs 1 によって返されたファイルシステム名に ``mount_'' の接頭辞を付けて 命名されます。 それゆえ、 .Tn NFS ファイルシステムは .Xr mount_nfs 8 マニュアルページに記述されています。 .Pp .Fn unmount システムコールは、ファイルシステムを指定のマウントポイント .Fa dir から対応付け解除します。 .Pp .Fa flags 引数で .Dv MNT_FORCE を指定することで、ファイルがアクティブであっても、 ファイルシステムが強制的にマウント解除または 読取り専用 (MNT_UPDATE と MNT_RDONLY も指定されている場合) に される必要があることを示します。 アクティブな特殊デバイスは機能し続けますが、 他のアクティブなファイルへのそれ以降のアクセスは、 たとえファイルシステムが後に再マウントされたとしてもエラーを引き起こします。 .Pp .Dv MNT_SUIDDIR オプションを機能させるためには、SUIDDIR オプションがカーネル内に 組み込まれていることが必要です。 詳細については .Xr mount 8 ページと .Xr chmod 2 ページを参照してください。 .Sh 戻り値 .Rv -std .Sh エラー .Fn mount システムコールは、次のうちの 1 つでも起きたときには処理を失敗します: .Bl -tag -width Er .It Bq Er EPERM 呼び出し側がスーパユーザでも -.Ar dir +.Fa dir の所有者でもありません。 .It Bq Er ENAMETOOLONG パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。 .It Bq Er ELOOP パス名を変換するときに検出されたシンボリックリンクが多すぎます。 .It Bq Er ENOENT .Fa dir の構成要素が存在しません。 .It Bq Er ENOTDIR .Fa name の構成要素がディレクトリでないか、または .Fa special のパスの構成要素中にディレクトリ以外のものが含まれています。 .It Bq Er EBUSY 別のプロセスが現時点で .Fa dir 引数への参照を保持しています。 .It Bq Er EFAULT .Fa dir はプロセスに割り当てられたアドレス空間の範囲外を指しています。 .El .Pp 次のエラーは、 .Em ufs ファイルシステムのマウントについて発生する可能性があります。 .Bl -tag -width Er .It Bq Er ENODEV ufs_args の構成要素 .Ar fspec が存在しません。 .It Bq Er ENOTBLK .Fa fspec 引数はブロックデバイスではありません。 .It Bq Er ENXIO .Fa fspec のメジャーデバイス番号が範囲外です (これはハードウェアに 対応するデバイスドライバが存在しないことを示します)。 .It Bq Er EBUSY .Fa fspec は既にマウントされています。 .It Bq Er EMFILE マウントテーブル空間が枯渇しました。 .It Bq Er EINVAL ファイルシステムのスーパブロックに 不都合なマジック番号または範囲外のブロックサイズがありました。 .It Bq Er ENOMEM ファイルシステムについてのシリンダグループ情報を読み取るのに十分な メモリがありませんでした。 .It Bq Er EIO スーパブロックまたはシリンダグループの情報を読み取る間に 入出力エラーが発生しました。 .It Bq Er EFAULT .Fa fspec がプロセスに割り当てられたアドレス空間の範囲外を指しています。 .El .Pp 次のエラーは .Em nfs ファイルシステムマウントについて起きる可能性があります: .Bl -tag -width Er .It Bq Er ETIMEDOUT .Em nfs がサーバと接触しようとして時間切れになりました。 .It Bq Er EFAULT nfs_args によって記述された情報の一部が、 プロセスに割り当てられたアドレス空間の範囲外を指しています .El .Pp .Fn unmount システムコールは、次のエラーの 1 つでも起きたときには処理を失敗します: .Bl -tag -width Er .It Bq Er EPERM 呼び出し側がスーパユーザでも該当する -.Xr mount 2 +.Fn mount の呼び出しを実行したユーザでもありません。 .It Bq Er ENOTDIR パスの構成要素中にディレクトリ以外のものが含まれています。 .It Bq Er ENAMETOOLONG パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。 .It Bq Er ELOOP パス名を変換するときに検出されたシンボリックリンクが多すぎます。 .It Bq Er EINVAL 指定されたディレクトリがマウントテーブル内にありません。 .It Bq Er EBUSY プロセスがファイルシステム上にあるファイルへの参照を保持しています。 .It Bq Er EIO キャッシュされたファイルシステム情報を書き込んでいる間に 入出力エラーが起きました。 .It Bq Er EFAULT .Fa dir 引数がプロセスに割り当てられたアドレス空間の範囲外を指しています。 .El .Pp .Em ufs マウントは、最大数のファイルシステムが現時点でマウントされている場合にも 処理を失敗します。 .Sh 関連項目 .Xr lsvfs 1 , .Xr mount 8 , -.Xr sysctl 8 , .Xr umount 8 .Sh バグ エラーコードには、明瞭なメッセージにするために変更が必要なものがあります。 .Sh 歴史 .Fn mount 関数と .Fn unmount 関数は .At v6 で登場しました。 diff --git a/ja_JP.eucJP/man/man2/mprotect.2 b/ja_JP.eucJP/man/man2/mprotect.2 index 48df503b19..6b856491c6 100644 --- a/ja_JP.eucJP/man/man2/mprotect.2 +++ b/ja_JP.eucJP/man/man2/mprotect.2 @@ -1,95 +1,96 @@ .\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. 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. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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 OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)mprotect.2 8.1 (Berkeley) 6/9/93 -.\" %FreeBSD: src/lib/libc/sys/mprotect.2,v 1.16 2002/12/23 19:25:03 trhodes Exp % +.\" %FreeBSD: src/lib/libc/sys/mprotect.2,v 1.17 2003/02/23 01:47:48 ru Exp % .\" .\" $FreeBSD$ .Dd June 9, 1993 .Dt MPROTECT 2 .Os .Sh 名称 .Nm mprotect .Nd ページの保護属性を制御する .Sh ライブラリ .Lb libc .Sh 書式 .In sys/mman.h .Ft int .Fn mprotect "const void *addr" "size_t len" "int prot" .Sh 解説 .Fn mprotect システムコールは指定のページが保護属性 .Fa prot を持つように変更します。 すべての場合においてページ単位での保護属性を保証するわけではありません。 保護属性変更の細かさはリージョン全体と同じ大きさかもしれません。 リージョンは .Vt "struct vm_map_entry" の start (開始) と end (終了) のアドレスで定義される仮想アドレス空間です。 .Pp 現在、以下の OR をとって組み合わせることが可能な保護ビットが知られています。 -.Bl -tag -width "PROT_WRITE" -.It PROT_NONE +.Pp +.Bl -tag -width ".Dv PROT_WRITE" -compact +.It Dv PROT_NONE 全く保護しません。 .It PROT_READ ページは読取り可能です。 -.It PROT_WRITE +.It Dv PROT_WRITE ページは書込み可能です。 -.It PROT_EXEC +.It Dv PROT_EXEC ページは実行可能です。 .El .Sh 戻り値 .Rv -std mprotect .Sh エラー .Fn mprotect システムコールは次の場合に処理を失敗します: .Bl -tag -width Er .It Bq Er EINVAL .Fa addr 引数と .Fa len 引数で指定している仮想アドレス範囲は有効ではありません。 .It Bq Er EACCES 呼び出しプロセスは .Fa prot 引数によって指定される値に保護属性を変更することを許可されていません。 .El .Sh 関連項目 .Xr madvise 2 , .Xr mincore 2 , .Xr msync 2 , .Xr munmap 2 .Sh 歴史 .Fn mprotect システムコールは .Bx 4.4 ではじめて登場しました。 diff --git a/ja_JP.eucJP/man/man2/open.2 b/ja_JP.eucJP/man/man2/open.2 index cadf5f1a7c..de2df070e6 100644 --- a/ja_JP.eucJP/man/man2/open.2 +++ b/ja_JP.eucJP/man/man2/open.2 @@ -1,298 +1,298 @@ .\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. 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. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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 OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)open.2 8.2 (Berkeley) 11/16/93 -.\" %FreeBSD: src/lib/libc/sys/open.2,v 1.25 2002/12/19 09:40:25 ru Exp % +.\" %FreeBSD: src/lib/libc/sys/open.2,v 1.26 2003/03/24 16:07:19 charnier Exp % .\" .\" $FreeBSD$ .Dd November 16, 1993 .Dt OPEN 2 .Os .Sh 名称 .Nm open .Nd 読取りまたは書込み用にファイルをオープンする、または作成する .Sh ライブラリ .Lb libc .Sh 書式 .In fcntl.h .Ft int .Fn open "const char *path" "int flags" "..." .Sh 解説 .Fa path によって指定されるファイルを、引数 .Fa flags によって指定されたように読取りまたは書込み (またはその両方) 用にオープンし、 そのファイル記述子を呼び出し元プロセスに返します。 ファイルが存在しない場合にはファイルを作成するように、 .Fa flags 引数で指示できます .Dv ( O_CREAT フラグを指定する)。 この場合、 .Fn open には 3 番目の引数 .Fa "mode_t mode" が必要であり、ファイルは .Xr chmod 2 で説明されているようにモード .Fa mode で作成され、プロセスの umask 値によって修正されます .Pf ( Xr umask 2 を参照)。 .Pp 指定されたフラグは次の値の論理和 .\".Em or Ns 'ing .Em ( or ) で作成されます。 .Pp .Bd -literal -offset indent -compact O_RDONLY 読取り専用でオープン O_WRONLY 書込み専用でオープン O_RDWR 読取りと書込み用にオープン O_NONBLOCK オープンするときにブロックしない O_APPEND 書込みのたびに末尾に追加する O_CREAT ファイルが存在しない場合、作成する O_TRUNC サイズを 0 に切り捨てる O_EXCL 作成するファイルが既に存在した場合、エラーとする O_SHLOCK 共有ロックを自動的に取得する O_EXLOCK 排他的ロックを自動的に取得する O_DIRECT キャッシュの効果を無くすまたは減らす O_FSYNC 同期的に書き込む O_NOFOLLOW シンボリックリンクを辿らない .Ed .Pp .Dv O_APPEND を設定してファイルをオープンすると、 ファイルへの書込みはすべてファイルの末尾に追加されます。 .Dv O_TRUNC が指定されていてファイルが存在する場合、ファイルは長さ 0 に切り捨てられます。 .Dv O_EXCL が .Dv O_CREAT とともに設定されていてファイルが既に存在する場合、 .Fn open はエラーを返します。 これを使用して、簡単な排他的アクセスロッキングメカニズムを実現できます。 .Dv O_EXCL が設定されていてパス名の最後の構成要素がシンボリックリンクの場合、 たとえシンボリックリンクが存在しない名前を指していたとしても .Fn open は処理に失敗します。 .Dv O_NONBLOCK フラグが指定されていて .Fn open システムコールの結果、プロセスが何らかの理由でブロックされると (たとえば、 ダイアルアップ回線でキャリアを待っている場合)、 .Fn open は即座に戻ります。 記述子は、その後の操作のために非ブロッキングモードのままにされます。 .Pp .Dv O_FSYNC がマスクに使用された場合、すべての書込みは直ちにディスクに書き込まれ、 カーネルは書き込まれたデータをキャッシュせず、 書き込むべきすべてのデータが完了するまでは この記述子に対するすべての書込みは戻りません。 .Pp .Dv O_NOFOLLOW がマスクに使用された場合で .Fn open に渡された対象ファイルがシンボリックリンクの場合、 .Fn open は失敗します。 .Pp ファイルをオープンするときに、 .Xr flock 2 を使ったロックを得るには、共有ロックについては .Dv O_SHLOCK、 排他的ロックについては .Dv O_EXLOCK を設定します。 .Dv O_CREAT でファイルを作成する場合、ロック要求が失敗すること はありません (ただし、下層にあるファイルシステムが ロックをサポートしている場合に限ります)。 .Pp 読み書きにおけるキャッシュの効果を最小化もしくは無くすために .Dv O_DIRECT を使用可能です。 システムは、読み書きするデータのキャッシングを避けようとします。 データのキャッシングが避けられない場合、 データのキャッシュに対する影響を最小化します。 注意せずに使用すると、本フラグは劇的に性能を劣化させます。 .Pp 正常に完了すると、 .Fn open は、ファイル記述子を示す負でない整数を返します。 処理に失敗すると -1 を返します。 ファイル内の現在の位置をマークする ファイルポインタはファイルの先頭に設定されます。 .Pp 新しいファイルが作成される場合、そのグループは ファイルが含まれるディレクトリのグループに設定されます。 .Pp 新しい記述子は .Xr execve 2 システムコールを通じてオープンされたままであるように設定されます。 .Xr close 2 と .Xr fcntl 2 を参照してください。 .Pp システムには、1 つのプロセスによって同時にオープンできる ファイル記述子数に制限があります。 .Xr getdtablesize 2 -は現在のシステム制限を返します。 +システムコールは現在のシステム制限を返します。 .Sh 戻り値 正常に完了すると、 .Fn open はファイル記述子である負でない整数を返します。 処理に失敗すると -1 が返され、エラーを示すために .Va errno が設定されます。 .Sh エラー 指定のファイルは次の場合を除いてオープンされます: .Bl -tag -width Er .It Bq Er ENOTDIR パスの構成要素中にディレクトリ以外のものが含まれています。 .It Bq Er ENAMETOOLONG パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。 .It Bq Er ENOENT 指定されたファイルが存在せず、 .Dv O_CREAT も設定されていません。 .It Bq Er ENOENT 存在しなければならないパス名の構成要素が存在しません。 .It Bq Er EACCES 指定されたパスには、検索が許可されていないディレクトリが含まれています。 .It Bq Er EACCES 要求されたパーミッション (読取りまたは書込み用、または両方) が 指定のフラグに拒否されています。 .It Bq Er EACCES .Dv O_CREAT が指定されていて、ファイルが存在せず、かつファイルを作成する ディレクトリに書込み許可がありません。 .It Bq Er ELOOP パス名を変換するときに検出されたシンボリックリンクが多すぎます。 .It Bq Er EISDIR 指定のファイルがディレクトリであり、これを書込み用に オープンするように引数が指定されています。 .It Bq Er EROFS 指定されたファイルは読取り専用ファイルシステム上にあり、 そのファイルを修正しようとしています。 .It Bq Er EMFILE プロセスは、すでにオープンできるファイル記述子に関する制限に達しています。 .It Bq Er ENFILE システムファイルテーブルが満杯です。 .It Bq Er EMLINK .Dv O_NOFOLLOW が指定され、対象がシンボリックリンクです。 .It Bq Er ENXIO 指定のファイルはキャラクタ型特殊ファイルまたはブロック型特殊ファイルであり、 この特殊ファイルに結び付けられたデバイスは存在していません。 .It Bq Er ENXIO 指定されたファイルは FIFO パイプで、どのプロセスからも 読取り用にオープンされていないにも関らず、 これを書込み用にオープンしようとしました。 .It Bq Er EINTR .Fn open 操作がシグナルによって割り込みされました。 .It Bq Er EOPNOTSUPP .Dv O_SHLOCK または .Dv O_EXLOCK が指定されましたが、下層となっているファイルシステムは ロックをサポートしていません。 .It Bq Er EWOULDBLOCK .Dv O_NONBLOCK と、 .Dv O_SHLOCK か .Dv O_EXLOCK のどちらかが指定されましたが、ファイルはロックされています。 .It Bq Er ENOSPC .Dv O_CREAT が指定されていて、ファイルが存在せず、新しいファイル用のエントリを 配置中のディレクトリは、そのディレクトリを含むファイルシステムに 空間が残っていないため拡張できません。 .It Bq Er ENOSPC .Dv O_CREAT が指定されていて、ファイルが存在せず、かつファイルが作成中の ファイルシステム上に未使用の inode がありません。 .It Bq Er EDQUOT .Dv O_CREAT が指定されていて、ファイルが存在せず、かつ新しいファイル用の エントリを配置中のディレクトリは、そのディレクトリを含む ファイルシステム上でディスクブロックの ユーザのクォータが枯渇したために拡張できません。 .It Bq Er EDQUOT .Dv O_CREAT が指定されていて、ファイルが存在せず、かつファイルを作成中の ファイルシステム上で inode のユーザのクォータが枯渇しています。 .It Bq Er EIO ディレクトリエントリを作成中、または .Dv O_CREAT 用の inode を割り当て中に入出力エラーが発生しました。 .It Bq Er ETXTBSY ファイルは純粋な手続き (共有テキスト) ファイルで、 .Fn open システムコールが書込みアクセスを要求しましたが、ファイルは実行中です。 .It Bq Er EFAULT .Fa path 引数は、プロセスに割り当てられたアドレス空間の範囲外を指しています。 .It Bq Er EEXIST .Dv O_CREAT と .Dv O_EXCL が指定されていて、ファイルが存在します。 .It Bq Er EOPNOTSUPP ソケットをオープンしようとしました (現時点では実装されていません)。 .It Bq Er EINVAL .Dv O_RDONLY , .Dv O_WRONLY および .Dv O_RDWR の不正な組合わせで記述子をオープンしようとしました。 .El .Sh 関連項目 .Xr chmod 2 , .Xr close 2 , .Xr dup 2 , .Xr getdtablesize 2 , .Xr lseek 2 , .Xr read 2 , .Xr umask 2 , .Xr write 2 .Sh 歴史 .Fn open 関数は .At v6 で登場しました。 diff --git a/ja_JP.eucJP/man/man2/rfork.2 b/ja_JP.eucJP/man/man2/rfork.2 index 5c45b2156f..17d42be35b 100644 --- a/ja_JP.eucJP/man/man2/rfork.2 +++ b/ja_JP.eucJP/man/man2/rfork.2 @@ -1,169 +1,169 @@ .\" .\" This manual page is taken directly from Plan9, and modified to .\" describe the actual BSD implementation. Permission for .\" use of this page comes from Rob Pike . .\" -.\" %FreeBSD: src/lib/libc/sys/rfork.2,v 1.29 2003/01/31 08:59:00 tjr Exp % +.\" %FreeBSD: src/lib/libc/sys/rfork.2,v 1.30 2003/02/23 01:47:48 ru Exp % .\" .\" $FreeBSD$ .Dd January 31, 2003 .Dt RFORK 2 .Os .Sh 名称 .Nm rfork .Nd プロセスリソースの操作 .Sh ライブラリ .Lb libc .Sh 書式 .In unistd.h .Ft int .Fn rfork "int flags" .Sh 解説 fork, vfork, rfork は、新しいプロセスが作成される唯一の方法です。 .Fn rfork への引数 .Fa flags は、起動しているプロセス (親) のどのリソースが新しいプロセス (子) に よって共有されるか、またはそれらのデフォルト値に初期化されるかを選択します。 リソースにはオープンファイル記述子テーブル (これは、共有される場合、 プロセスが他のプロセスについてファイルを開閉することを 許容します) およびオープンファイルが含まれます。 .Fa flags 引数は次の項目の論理和 (OR) です: -.Bl -tag -width "RFLINUXTHPN" -offset indent -.It RFPROC +.Bl -tag -width ".Dv RFLINUXTHPN" +.It Dv RFPROC 設定されている場合、新しいプロセスが作成されます。 そうでない場合、変更が現在のプロセスに影響を及ぼします。 -.It RFNOWAIT +.It Dv RFNOWAIT 設定されている場合、子プロセスは親プロセスから分離されます。 終了時に、子プロセスは、親プロセスが集めるステータスを残しません。 .Xr wait 2 を参照してください。 -.It RFFDG +.It Dv RFFDG 設定されている場合、起動側のファイル記述子テーブル .Xr ( intro 2 を参照) がコピーされます。 そうでない場合、2 つのプロセスが 1 つのテーブルを共有します。 -.It RFCFDG +.It Dv RFCFDG 設定されている場合、新しいプロセスは新しいファイル記述子テーブルを持って 開始します。 .Dv RFFDG とは互いに排他的です。 -.It RFMEM +.It Dv RFMEM 設定されている場合、 通常、ハードウェアのページテーブルを直接共有することで、 カーネルはアドレス空間全体を強制的に共有します。 子は、このような方法で、親プロセスが所有しているすべてのセグメントを、 それが普段共有可能であるか否かに関係なく、継承し共有します。 スタックセグメントは分割されない (親と子の両方が同じスタック上に復帰する) ので、RFMEM フラグを指定した .Fn rfork は一般に、C 言語を含む高級言語から直接呼び出すことはできません。 共に設定可能なフラグは .Dv RFPROC だけです。 この問題を解決し、提供されたスタック上で新しいプロセスを 走らせるために補助関数が提供されています。 詳しくは .Xr rfork_thread 3 を参照してください。 -.It RFSIGSHARE +.It Dv RFSIGSHARE 設定されている場合、カーネルは、親子間で sigacts 構造体を強制的に共有します。 -.It RFLINUXTHPN +.It Dv RFLINUXTHPN 設定されている場合、カーネルは、子についてのスレッド終了時に、 SIGCHILD の代わりに SIGUSR1 を返します。 これは特定の Linux クローン動作を模倣するためです。 .El .Pp 共有ファイル記述子テーブル内のファイル記述子は、 明示的に閉じられるか、またはテーブルを 共有しているすべてのプロセスが終了するまで開いたままに保たれます。 .Pp .Dv RFPROC が設定されている場合、 親プロセス内で返される値は子プロセスのプロセス ID です。 子プロセス内で返される値は 0 です。 .Dv RFPROC がない場合、戻り値は 0 です。 プロセス ID の範囲は 1 から最大整数値 .Ft ( int ) です。 必要であれば、要求されたプロセスリソースが利用できるようになるまで .Fn rfork システムコールは待機します。 .Pp .Fn fork システムコールは、 .Fn rfork "RFFDG | RFPROC" への呼び出しとして実装可能ですが、後方互換性のために そのようには実装されていません。 .Sh 戻り値 正常に完了した場合、 .Fn rfork は、子プロセスに値 0 を返し、子プロセスのプロセス ID を親プロセスに 返します。 そうでない場合、子プロセスは作成されずに、値 -1 が親プロセスに返され、 エラーを示すためにグローバル変数 .Va errno が設定されます。 .Sh エラー .Fn rfork システムコールは、次の場合に処理を失敗し、子プロセスは作成されません: .Bl -tag -width Er .It Bq Er EAGAIN 実行中のプロセスの合計数がシステムの課す制限を超過してしまいます。 制限は .Xr sysctl 3 MIB 変数 .Dv KERN_MAXPROC によって指定されます (スーパユーザを除いて、制限は実際には これより 10 個少なくなります)。 .It Bq Er EAGAIN ユーザがスーパユーザではなく、1 人のユーザによる実行中の プロセスの合計数がシステムの課した制限を超過してしまいます。 制限は、 .Xr sysctl 3 MIB 変数 .Dv KERN_MAXPROCPERUID によって指定されます。 .It Bq Er EAGAIN ユーザがスーパユーザではなく、 .Fa resource 引数 .Dv RLIMIT_NOFILE に対応するソフトリソースの制限を超過してしまいます .Pf ( Xr getrlimit 2 を参照)。 .It Bq Er EINVAL RFFDG フラグと RFCFDG フラグの両方が指定されました。 .It Bq Er EINVAL これまでに列挙されていないフラグが指定されました。 .It Bq Er ENOMEM 新しいプロセス用に十分なスワップ空間が不足しました。 .El .Sh 関連項目 .Xr fork 2 , .Xr intro 2 , .Xr minherit 2 , .Xr vfork 2 , .Xr rfork_thread 3 .Sh バグ .Fx では、ネイティブな .Fn clone ライブラリコールは未だに実装されていませんし、 現在の pthreads 実装は RFMEM を指定した .Fn rfork を利用していません。 linux スレッドライブラリのネイティブポートである、 .Pa /usr/ports/devel/linuxthreads は RFMEM を利用して動作する .Fn clone 呼び出しを含んでいます。 .Xr rfork_thread 3 関数は .Fn clone の代わりとして利用することができます。 .Sh 歴史 .Fn rfork 関数は Plan9 ではじめて登場しました。 diff --git a/ja_JP.eucJP/man/man2/sendfile.2 b/ja_JP.eucJP/man/man2/sendfile.2 index 9253f57f14..9546140d57 100644 --- a/ja_JP.eucJP/man/man2/sendfile.2 +++ b/ja_JP.eucJP/man/man2/sendfile.2 @@ -1,160 +1,208 @@ .\" Copyright (c) 1998, David Greenman .\" 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 unmodified, 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 OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" %FreeBSD: src/lib/libc/sys/sendfile.2,v 1.16 2002/12/19 09:40:25 ru Exp % +.\" %FreeBSD: src/lib/libc/sys/sendfile.2,v 1.17 2003/03/12 09:28:44 seanc Exp % .\" .\" $FreeBSD$ .Dd November 5, 1998 .Dt SENDFILE 2 .Os .Sh 名称 .Nm sendfile .Nd ファイルをソケットに送信 .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In sys/socket.h .In sys/uio.h .Ft int .Fn sendfile "int fd" "int s" "off_t offset" "size_t nbytes" "struct sf_hdtr *hdtr" "off_t *sbytes" "int flags" .Sh 解説 .Fn sendfile システムコールは、記述子 .Fa fd によって指定された通常のファイルを、記述子 .Fa s によって指定されたストリームソケットから送信します。 .Pp .Fa offset 引数はファイルのどこから開始すべきかを指定します。 .Fa nbytes 引数は、ファイルの何バイトを送信する必要があるかを指定します。 0 は、ファイルの終わりまで送信するという特殊な意味を持ちます。 .Pp オプションのヘッダまたはトレーラ、またはその両方は、構造体 sf_hdtr を 指すポインタを指定することによってファイルの前と後で送信できます。 構造体 sf_hdtr の構造は次のとおりです: .Pp .Bd -literal -offset indent -compact struct sf_hdtr { struct iovec *headers; /* ヘッダ iovecs を指すポインタ */ int hdr_cnt; /* ヘッダ iovecs の数 */ struct iovec *trailers; /* トレーラ iovecs を指すポインタ */ int trl_cnt; /* トレーラ iovecs の数 */ }; .Ed .Pp .Fa headers ポインタと .Fa trailers ポインタは、NULL でない場合に構造体 iovec 構造の配列を指します。 iovec 構造体の詳細については、 .Fn writev システムコールを参照してください。 これらの配列内の iovecs の数は、 .Fa hdr_cnt と .Fa trl_cnt によって指定されます。 .Pp NULL でない場合に、システムは、ソケット上に送信された合計バイト数を、 .Fa sbytes によって指された変数に書き込みます。 .Pp .Fa flags 引数は現時点では未定義であり、0 に指定する必要があります。 .Pp 非ブロッキング入出力用に指定されたソケットを使用するときに、 .Fn sendfile は要求されたよりも少ないバイトを送信することがあります。 この場合、正常に書き込まれたバイト数が .Fa *sbytes (指定されている場合) に返され、エラー .Er EAGAIN が返されます。 .Sh 実装に関する注 .Fn sendfile の .Fx での実装は「0 コピー」です。 すなわち、ファイルデータのコピーが回避されるように最適化されています。 +.Sh チューニング +内部ではこのシステムコールは、クライアントへの送信ファイルデータを +取り扱うために、特別な +.Xr sendfile 2 +バッファ +.Pq Fa "struct sf_buf" +を使用しています。 +送信ソケットがブロックされていて、 +利用可能な送信ファイルバッファが十分でない場合には、 +.Xr sendfile 2 +はブロックされ、 +.Dq sfbufa +の状態を報告します。 +送信ソケットがブロックされておらず、 +利用可能な送信ファイルバッファが十分でない場合には、 +この呼び出しはブロックされ、呼び出しを終了する前に必要なバッファが +利用可能になるのを待ちます。 +.Pp +.Fa sf_buf +の割り当てられた数は、 +.Xr sendfile 2 +を介してクライアントにデータを送信するために使用される nmbclusters の数に、 +比例しているべきです。 +ブロッキングを避けるために適宜にチューンしましょう! +.Xr sendfile 2 +を広範囲に使用する忙しい装置が、 +.Ar kern.ipc.nmbclusters +に展開されるこれらの値を増加させたくなるかもしれません +.Po +詳細は +.Xr tuning 7 +を参照してください +.Pc +。 +.Pp +使用中の +.Xr sendfile 2 +バッファの数は、 +.Xr loader.conf 5 +の中の +.Em kern.ipc.nsfbufs +変数または +.Em NSFBUFS +カーネルコンフィギュレーション調整のどちらかによって、ブート時に決定されます。 +sendfile バッファの数は +.Em kern.maxusers +に合わせて調整されます。 .Sh 戻り値 .Rv -std sendfile .Sh エラー .Bl -tag -width Er .It Bq Er EBADF .Fa fd 引数が有効なファイル記述子ではありません。 .It Bq Er EBADF .Fa s 引数が有効なソケット記述子ではありません。 .It Bq Er ENOTSOCK .Fa s 引数がソケットではありません。 .It Bq Er EINVAL .Fa fd 引数が通常のファイルではありません。 .It Bq Er EINVAL .Fa s 引数が SOCK_STREAM 型のソケットではありません。 .It Bq Er EINVAL .Fa offset 引数が負であるか、または範囲外です。 .It Bq Er ENOTCONN .Fa s 引数が、未接続のソケットを指しています。 .It Bq Er EPIPE 通信相手が接続を閉じてしまいました。 .It Bq Er EIO .Fa fd から読取り中に入出力エラーが発生しました。 .It Bq Er EFAULT 引数について無効なアドレスが指定されました。 .It Bq Er EAGAIN ソケットは非ブロッキング入出力と指定されており、ソケットバッファが 満杯であるためにすべてのデータが送信されませんでした。 sbytes が指定された場合、送信が正常に完了したバイト数が .Fa *sbytes 内に返されます。 .El .Sh 関連項目 .Xr open 2 , .Xr send 2 , .Xr socket 2 , +.Xr tuning 7 , .Xr writev 2 .Sh 歴史 .Fn sendfile システムコールは、 .Fx 3.0 ではじめて登場しました。 このマニュアルページは .Fx 3.1 ではじめて登場しました。 .Sh 作者 .Fn sendfile システムコールとこのマニュアルページは .An David Greenman Aq dg@root.com が作成しました。 diff --git a/ja_JP.eucJP/man/man2/sigaction.2 b/ja_JP.eucJP/man/man2/sigaction.2 index 42fb111261..d03393d7ac 100644 --- a/ja_JP.eucJP/man/man2/sigaction.2 +++ b/ja_JP.eucJP/man/man2/sigaction.2 @@ -1,608 +1,608 @@ .\" Copyright (c) 1980, 1990, 1993 .\" The Regents of the University of California. 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. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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 OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" From: @(#)sigaction.2 8.2 (Berkeley) 4/3/94 -.\" %FreeBSD: src/lib/libc/sys/sigaction.2,v 1.47 2002/12/27 12:15:29 schweikh Exp % +.\" %FreeBSD: src/lib/libc/sys/sigaction.2,v 1.48 2003/03/24 16:07:19 charnier Exp % .\" .\" 2001/01/01 horikawa@jp.FreeBSD.org .\" sigvec.2 を更新する場合は、共通部分の多い sigaction.2 も同時に更新 .\" してください。 .\" .\" $FreeBSD$ .Dd April 3, 1994 .Dt SIGACTION 2 .Os .Sh 名称 .Nm sigaction .Nd ソフトウェアシグナル機能 .Sh ライブラリ .Lb libc .Sh 書式 .In signal.h .Bd -literal struct sigaction { union { void (*__sa_handler)(int); void (*__sa_sigaction)(int, struct __siginfo *, void *); } __sigaction_u; /* シグナルハンドラ */ int sa_flags; /* 後述のシグナルオプション参照 */ sigset_t sa_mask; /* 適用するシグナルマスク */ }; #define sa_handler __sigaction_u.__sa_handler #define sa_sigaction __sigaction_u.__sa_sigaction .Ed .Ft int .Fo sigaction .Fa "int sig" .Fa "const struct sigaction * restrict act" .Fa "struct sigaction * restrict oact" .Fc .Sh 解説 システムではシグナルの集合を定義しており、 これらはプロセスに配信されることがあります。 シグナルの配信は、ハードウェア割込みの発生に似ています。 通常の場合、シグナルのさらなる発生はブロックされ、 現在のプロセスコンテキストは保存されて、新しいプロセスコンテキストが 作成されます。 プロセスは、シグナルの配信先 .Em handler を指定することもあれば、シグナルを .Em 無視 することを指定することもあります。 シグナルが発生した場合に、システムがデフォルトのアクションを取ることを 指定することも可能です。 シグナルが .Em ブロック されることもあり、その場合、シグナルの配信は、 .Em ブロックが解除 されるまで延期されます。 配信時に取るアクションは、配信時に決まります。 通常の場合は、シグナルハンドラが、プロセスの現行スタックで動作します。 これはハンドラごとに変更可能であり、変更すれば、シグナルは特殊な .Em シグナルスタック で実行可能です。 .Pp 通常の場合、シグナルルーチンは、呼び出しの原因となったシグナルが ブロックされた状態で動作しますが、その他のシグナルが発生する可能性は あります。 グローバルの .Em シグナルマスク には、プロセスへの配信が現在 ブロックされているシグナルの集合が定義されています。 プロセスのシグナルマスクは、親のシグナルマスクで初期化されます (通常は空)。 .Xr sigprocmask 2 が呼び出された場合、またはシグナルがプロセスに配信された場合に、 シグナルマスクは変更されます。 .Pp あるシグナルの生起条件がプロセスで発生すると、そのシグナルが、 プロセスで保留中のシグナルの集合に追加されます。 そのシグナルがプロセスで現在 .Em ブロック されていない場合は、プロセスに配信されます。 シグナルは、プロセスがオペレーティングシステムに入っている間に (システム呼び出し、ページエラーやトラップ、クロック割込み中などに) 配信されます。 複数のシグナルの配信準備が同時に整った場合は、トラップで生じたシグナルが 先に配信されます。 その他のシグナルは、それぞれが前のシグナルのハンドラに対し、 最初の命令の前に割り込んだ状態で同時に処理されます。 保留になっているシグナルの集合は、 .Xr sigpending 2 システムコールで返されます。 捕捉されたシグナルが配信されると、プロセスの現在の 状態が保存され、新しいシグナルマスクが以下で説明するように算出されて、 シグナルハンドラが呼び出されます。 ハンドラの呼び出しは、 シグナル処理ルーチンが正常に戻った場合に、プロセスがシグナル配信前の コンテキストで実行を再開するように設定されます。 プロセスが別のコンテキストでの再開を望む場合は、 前のコンテキストそのものを自分自身で回復するように設定する必要があります。 .Pp シグナルがプロセスに配信されると、プロセスの シグナルハンドラの実行が続く間 (または .Xr sigprocmask 2 システムコールが呼び出されるまで)、新しいシグナルマスクが設置されます。 このマスクは、現在のシグナルマスク集合、配信されるシグナル、 呼び出されるハンドラに関連したシグナルマスクの和集合を取って形成されます。 .Pp .Fn sigaction システムコールは、 .Fa sig で指定したシグナルのアクションを割り当てます。 .Fa act が 0 でない場合は、アクション .Dv ( SIG_DFL , .Dv SIG_IGN かハンドラルーチン)、および指定されたシグナルの配信時に 使用するマスクが指定されます。 .Fa oact が 0 でない場合は、そのシグナルのそれまでの処理情報がユーザに返されます。 .Pp シグナルハンドラが設置されると、通常の場合は別の .Fn sigaction システムコールを呼び出すか .Xr execve 2 を実行するまで、そのシグナルハンドラは設置されたままです。 .Fa sa_handler を .Dv SIG_DFL に設定することで、 シグナルごとに固有なデフォルトアクションにリセットすることができます。 デフォルトとは、プロセスの終了 (コアダンプが取られることもあります)、 アクションなし、プロセスの停止、プロセスの継続です。 それぞれのシグナルのデフォルトアクションについては、 下記のシグナルリストを参照してください。 .Fa sa_handler が .Dv SIG_DFL である場合、シグナルのデフォルトアクションはシグナルの破棄になります。 また、シグナルが保留になっている場合でも、シグナルがマスクされていても 保留中のシグナルは破棄されます。 .Fa sa_handler を .Dv SIG_IGN に設定すると、現在のシグナル実体と保留中のシグナル実体は無視されて 破棄されます。 .Pp オプションは、 .Va sa_flags を設定することで指定できます。 それぞれのビットの意味は以下のとおりです: .Bl -tag -offset indent -width SA_RESETHANDXX .It Dv SA_NOCLDSTOP .Dv SIGCHLD シグナルの受信関数を設置する場合にこのビットを設定すると、 子プロセスが停止したときではなく、子プロセスが終了するときにのみ、 .Dv SIGCHLD シグナルが生成されます。 .It SA_NOCLDWAIT .Dv SIGCHLD シグナルで .Fn sigaction を呼び出す場合にこのビットを設定すると、システムは、呼び出し側プロセスの 子プロセスが終了したときにゾンビプロセスを作成しなくなります。 そのあと、呼び出し側プロセスが .Xr wait 2 かそれに相当する関数を実行すると、呼び出し側プロセスのすべて の子プロセスが終了するまでブロックし、次に .Va errno を .Er ECHILD に設定して -1 を返します。 .It Dv SA_ONSTACK このビットを設定すると、システムは、 .Xr sigaltstack 2 で指定された .Em シグナルスタック の上で、プロセスにシグナルを配信します。 .It Dv SA_NODEFER このビットを設定すると、配信済みシグナルのさらなる発生が、 ハンドラの実行中にマスクされなくなります。 .It Dv SA_RESETHAND このビットを設定すると、シグナルが配信された瞬間に、ハンドラが .Dv SIG_DFL にリセットされます。 .It Dv SA_RESTART 下の段落を参照してください。 .It Dv SA_SIGINFO このビットが設定されている場合、ハンドラ関数は、sigaction 構造体の .Dv sa_sigaction メンバが指すものと見なします。 ハンドラ関数は、先に示したプロトタイプもしくは後で示す .Sx 使用例 に一致しなくてはなりません。 このビットは、 .Dv SIG_DFL もしくは .Dv SIG_IGN を割り当てる時には設定してはいけません。 .El .Pp 次に挙げるシステムコールの実行中にシグナルが捕捉されると、 そのシステムコールの呼び出しは、 エラー .Er EINTR で強制終了されるか、要求より短いデータ転送で戻るか、または再開されます。 保留中のシステムコールの再開は、 .Va sa_flags で .Dv SA_RESTART ビットを設定することで要求できます。 影響を受けるシステムコールは、 通信チャネルか遅いデバイス (端末など、通常ファイルではないもの) に対する .Xr open 2 , .Xr read 2 , .Xr write 2 , .Xr sendto 2 , .Xr recvfrom 2 , .Xr sendmsg 2 , .Xr recvmsg 2 と .Xr wait 2 , .Xr ioctl 2 です。 しかし、すでに実行されているシステムコールは再開されず、 部分的な処理成功の結果 (短い読取りカウントなど) を返します。 .Pp .Xr fork 2 か .Xr vfork 2 の後では、すべてのシグナル、シグナルマスク、シグナルスタック、 再開フラグ、割込みフラグが子プロセスに継承されます。 .Pp .Xr execve 2 -は、捕捉されていたすべてのシグナルのデフォルトアクションを元に戻し、 -すべてのシグナルをユーザスタックで受信されるようにリセットします。 +システムコールは、捕捉されていたすべてのシグナルのデフォルトアクションを +元に戻し、すべてのシグナルをユーザスタックで受信されるようにリセットします。 無視されたシグナルは無視されたままです。 シグナルマスクは同じ状態のままです。 保留中のシステムコールを再開する設定のシグナルは、その再開の設定のままです。 .Pp 以下はすべてのシグナルのリストです。 名称は、インクルードファイル .Aq Pa signal.h にあるものと同じです: .Bl -column SIGVTALARMXX "create core imagexxx" .It Sy "名称 デフォルトアクション 説明" .It Dv SIGHUP No " プロセスの終了" " 端末ラインのハングアップ" .It Dv SIGINT No " プロセスの終了" " プログラムの割込み" .It Dv SIGQUIT No " コアイメージの作成" " プログラムの中断終了" .It Dv SIGILL No " コアイメージの作成" " 不正な命令" .It Dv SIGTRAP No " コアイメージの作成" " トラップのトレース" .It Dv SIGABRT No " コアイメージの作成" Ta Xr abort 3 の呼び出し (以前の .Dv SIGIOT ) .It Dv SIGEMT No " コアイメージの作成" " 命令実行のエミュレート" .It Dv SIGFPE No " コアイメージの作成" " 浮動小数例外" .It Dv SIGKILL No " プロセスの終了" " プログラムの強制終了" .It Dv SIGBUS No " コアイメージの作成" " バスエラー" .It Dv SIGSEGV No " コアイメージの作成" " セグメンテーション違反" .It Dv SIGSYS No " コアイメージの作成" " 存在しないシステムコールの呼び出し" .It Dv SIGPIPE No " プロセスの終了" " 読取り側がないパイプへの書込み" .It Dv SIGALRM No " プロセスの終了" " リアルタイムタイマの満了" .It Dv SIGTERM No " プロセスの終了" " ソフトウェア終了シグナル" .It Dv SIGURG No " シグナルの破棄" " 緊急状況がソケットに発生" .It Dv SIGSTOP No " プロセスの停止" " 停止 (捕捉も無視もできません)" .It Dv SIGTSTP No " プロセスの停止" " キーボードから生成された停止シグナル" .It Dv SIGCONT No " シグナルの破棄" " 停止後の継続" .It Dv SIGCHLD No " シグナルの破棄" " 子プロセスの状態変化" .It Dv SIGTTIN No " プロセスの停止" " バックグラウンドプロセスが制御端末から読み取ろうとした" .It Dv SIGTTOU No " プロセスの停止" " バックグラウンドプロセスが制御端末に書き込もうとした" .It Dv SIGIO No " シグナルの破棄" " 記述子への " .Tn I/O 可能 ( .Xr fcntl 2 参照) .It Dv SIGXCPU No " プロセスの終了" " cpu 制限時間の超過 (" .Xr setrlimit 2 参照) .It Dv SIGXFSZ No " プロセスの終了" " ファイルサイズ制限の超過 (" .Xr setrlimit 2 参照) .It Dv SIGVTALRM No " プロセスの終了" " 仮想時間アラーム (" .Xr setitimer 2 参照) .It Dv SIGPROF No " プロセスの終了" " プロファイリングタイマアラーム ( .Xr setitimer 2 参照) .It Dv SIGWINCH No " シグナルの破棄" " ウィンドウサイズの変化" .It Dv SIGINFO No " シグナルの破棄" " キーボードからのステータス要求" .It Dv SIGUSR1 No " プロセスの終了" " ユーザ定義シグナル 1" .It Dv SIGUSR2 No " プロセスの終了" " ユーザ定義シグナル 2" .El .Sh 注 .Fa act に指定する .Fa sa_mask フィールドでは、 .Dv SIGKILL や .Dv SIGSTOP をブロックできません。 ブロックしようとしても無視されます。 .Pp 以下の関数は、再入的であるかシグナルで割り込まれることがないかのどちらかで、 非同期シグナルでも安全です。 このため、アプリケーションは、シグナル受信関数から制限なく呼び出せます: .Pp ベースインタフェース .Pp .Fn _exit , .Fn access , .Fn alarm , .Fn cfgetispeed , .Fn cfgetospeed , .Fn cfsetispeed , .Fn cfsetospeed , .Fn chdir , .Fn chmod , .Fn chown , .Fn close , .Fn creat , .Fn dup , .Fn dup2 , .Fn execle , .Fn execve , .Fn fcntl , .Fn fork , .Fn fpathconf , .Fn fstat , .Fn fsync , .Fn getegid , .Fn geteuid , .Fn getgid , .Fn getgroups , .Fn getpgrp , .Fn getpid , .Fn getppid , .Fn getuid , .Fn kill , .Fn link , .Fn lseek , .Fn mkdir , .Fn mkfifo , .Fn open , .Fn pathconf , .Fn pause , .Fn pipe , .Fn raise , .Fn read , .Fn rename , .Fn rmdir , .Fn setgid , .Fn setpgid , .Fn setsid , .Fn setuid , .Fn sigaction , .Fn sigaddset , .Fn sigdelset , .Fn sigemptyset , .Fn sigfillset , .Fn sigismember , .Fn signal , .Fn sigpending , .Fn sigprocmask , .Fn sigsuspend , .Fn sleep , .Fn stat , .Fn sysconf , .Fn tcdrain , .Fn tcflow , .Fn tcflush , .Fn tcgetattr , .Fn tcgetpgrp , .Fn tcsendbreak , .Fn tcsetattr , .Fn tcsetpgrp , .Fn time , .Fn times , .Fn umask , .Fn uname , .Fn unlink , .Fn utime , .Fn wait , .Fn waitpid , .Fn write .Pp リアルタイムインタフェース .Pp .Fn aio_error , .Fn clock_gettime , .Fn sigpause , .Fn timer_getoverrun , .Fn aio_return , .Fn fdatasync , .Fn sigqueue , .Fn timer_gettime , .Fn aio_suspend , .Fn sem_post , .Fn sigset , .Fn timer_settime .Pp ANSI C インタフェース .Pp .Fn strcpy , .Fn strcat , .Fn strncpy , .Fn strncat そして多分他にもいくつか .Pp 拡張インタフェース .Pp .Fn strlcpy , .Fn strlcat .Pp 上のリストに記載されていないすべての関数は、シグナルに関して安全でない と考えられます。 つまり、そのような関数がシグナルハンドラから呼び出されるときの動作は、 未定義です。 しかし一般的に、シグナルハンドラはフラグを設定する以上のことは あまりするべきではなく、それ以外のアクションは安全ではありません。 .Pp また、大域変数 .Va errno のコピーを作成し、シグナルハンドラから戻る前にその値を戻すように するのはよいことです。 こうすることによって、シグナルハンドラの内部から呼ばれた関数によって .Va errno が設定されてしまうという副作用を防ぐことができます。 .Sh 戻り値 .Rv -std sigaction .Sh 使用例 ハンドラが一致する可能性のあるプロトタイプは 3 つあります: .Bl -tag -offset indent -width short .It ANSI C: .Ft void .Fn handler int ; .It 伝統的な BSD スタイル: .Ft void .Fn handler int "int code" "struct sigcontext *scp" ; .It POSIX の SA_SIGINFO: .Ft void .Fn handler int "siginfo_t *info" "ucontext_t *uap" ; .El .Pp フラグ中で SA_SIGINFO ビットが設定されている場合、 ハンドラ関数は SA_SIGINFO プロトタイプに一致しなくてはなりません。 その場合、 .Dv sigaction 構造体の .Dv sa_sigaction メンバがハンドラ関数を指していなければなりません。 この方法で SIG_DFL あるいは SIG_IGN を割り当ててはいけないことに 注意してください。 .Pp SA_SIGINFO フラグが設定されていない場合、ハンドラ関数は ANSI C もしくは伝統的な .Bx プロトタイプのどちらかに一致しなくてはならず、 .Dv sigaction 構造体の .Dv sa_handler メンバがハンドラ関数を指していなければなりません。 実際には、 .Fx は常に後者である .Bx プロトタイプの 3 つの引数を送りますし、ANSI C プロトタイプは そのサブセットになっていますので、どちらでも動作します。 .Fx インクルードファイルの .Dv sa_handler メンバ宣言は、(POSIX の要求に従い) ANSI C のものです。 そのため、 .Bx スタイルの関数のポインタの場合、警告メッセージを無くして コンパイルするにはキャストする必要があります。 伝統的な .Bx スタイルは移植性がなく、その機能性も SA_SIGINFO ハンドラの完全な部分集合になっていますので、 .Bx スタイルを使うことは推奨されていません。 .Pp .Fa sig 引数はシグナル番号で、 の .Dv SIG... 値のうちの 1 つです。 .Bx スタイルのハンドラの .Fa code 引数および SA_SIGINFO ハンドラへの .Dv info 引数の .Dv si_code メンバには、シグナルの発生理由を説明した数値コードが含まれています。 通常、この数値コードは にある .Dv SI_... 値の 1 つであるか、もしくはシグナルに特化したコード、すなわち SIGFPE に対する .Dv FPE_... 値です。 .Bx スタイルのハンドラの .Fa scp 引数は sigcontext 構造体のインスタンスを指しています。 .Pp POSIX SA_SIGINFO ハンドラの .Fa uap 引数は、ucontext_t のインスタンスを指しています。 .Sh エラー 以下のうち 1 つが発生すると、 .Fn sigaction システムコールはエラーになり、新しいシグナルハンドラは設置されません: .Bl -tag -width Er .It Bq Er EFAULT .Fa act か .Fa oact は、プロセスに割り当てられたアドレス空間の範囲外を指しています。 .It Bq Er EINVAL .Fa sig 引数が、正しいシグナル番号になっていません。 .It Bq Er EINVAL .Dv SIGKILL か .Dv SIGSTOP のハンドラを無視するか提供しようとしました。 .El .Sh 規格 .Fn sigaction システムコールは、 .St -p1003.1-90 に適合しています。 .Dv SA_ONSTACK フラグと .Dv SA_RESTART フラグは、Berkeley の拡張機能です。 .Dv SIGTRAP , .Dv SIGEMT , .Dv SIGBUS , .Dv SIGSYS , .Dv SIGURG , .Dv SIGIO , .Dv SIGXCPU , .Dv SIGXFSZ , .Dv SIGVTALRM , .Dv SIGPROF , .Dv SIGWINCH , .Dv SIGINFO シグナルも同様です。 これらのシグナルは、 .Bx から派生したシステムのほとんどで使用できます。 .Dv SA_NODEFER フラグと .Dv SA_RESETHAND フラグは、その他のオペレーティングシステムとの下位互換性を保つためのものです。 .Dv SA_NOCLDSTOP フラグと .Dv SA_NOCLDWAIT フラグは、その他のオペレーティングシステムで一般的に見られるオプションです。 .Sh 関連項目 .Xr kill 1 , .Xr kill 2 , .Xr ptrace 2 , .Xr sigaltstack 2 , .Xr sigblock 2 , .Xr sigpause 2 , .Xr sigpending 2 , .Xr sigprocmask 2 , .Xr sigsetmask 2 , .Xr sigsuspend 2 , .Xr sigvec 2 , .Xr wait 2 , .Xr fpsetmask 3 , .Xr setjmp 3 , .Xr siginterrupt 3 , .Xr sigsetops 3 , .Xr ucontext 3 , .Xr tty 4 diff --git a/ja_JP.eucJP/man/man2/socket.2 b/ja_JP.eucJP/man/man2/socket.2 index 2a8071d571..e99c42bb39 100644 --- a/ja_JP.eucJP/man/man2/socket.2 +++ b/ja_JP.eucJP/man/man2/socket.2 @@ -1,289 +1,268 @@ .\" Copyright (c) 1983, 1991, 1993 .\" The Regents of the University of California. 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. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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 OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" From: @(#)socket.2 8.1 (Berkeley) 6/4/93 -.\" %FreeBSD: src/lib/libc/sys/socket.2,v 1.26 2003/01/01 18:48:43 schweikh Exp % +.\" %FreeBSD: src/lib/libc/sys/socket.2,v 1.28 2003/03/24 16:07:19 charnier Exp % .\" .\" $FreeBSD$ .\" .Dd November 24, 1997 .Dt SOCKET 2 .Os .Sh 名称 .Nm socket .Nd 通信のエンドポイントの作成 .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In sys/socket.h .Ft int .Fn socket "int domain" "int type" "int protocol" .Sh 解説 .Fn socket システムコールは、通信のエンドポイントを作成し、記述子を戻します。 .Pp .Fa domain 引数では、通信を行う通信ドメインを指定します。 これにより、使用するプロトコルファミリが選択されます。 このプロトコルファミリは、インクルードファイル .Ao Pa sys/socket.h Ac で定義されています。 現在解釈されるフォーマットは以下のとおりです: .Pp .Bd -literal -offset indent -compact PF_LOCAL PF_UNIX と呼ばれていた、ホスト内プロトコル PF_UNIX ホスト内プロトコル、使用は奨励されない。 PF_LOCAL を使用のこと PF_INET IPv4 プロトコル -PF_IMPLINK ARPAnet IMP アドレス PF_PUP BSP のような PUP プロトコル -PF_CHAOS MIT CHAOS プロトコル -PF_NS XNS (Xerox Network Systems) プロトコル -PF_ISO ISO プロトコル -PF_OSI 開放型システム間相互接続プロトコル - (Open System Interconnection) -PF_ECMA ヨーロッパ電子計算機工業会 - (European Computer Manufacturers) -PF_DATAKIT データキット (Datakit) プロトコル -PF_CCITT X.25 に似た ITU-T プロトコル -PF_SNA IBM SNA -PF_DECnet DECnet -PF_DLI DEC Direct / DLI (Data Link Interface) プロトコル -PF_LAT LAT プロトコル -PF_HYLINK NSC ハイパーチャネル PF_APPLETALK AppleTalk プロトコル PF_ROUTE 内部ルーティングプロトコル PF_LINK リンク層インタフェース -PF_XTP XTP プロトコル (Xpress Transfer Protocol) -PF_COIP コネクションオリエンテッド IP, 別名 ST II -PF_CNT Computer Network Technology 社のプロトコル -PF_SIP SIP プロトコル (Simple Internet Protocol) PF_IPX Novell 社 IPX (Internet Packet eXchange) プロトコル PF_RTIP RTIP パケットの識別に使用 PF_PIP PIP パケットの識別に使用 PF_ISDN 統合デジタル通信サービス網 (ISDN) PF_KEY 内部鍵管理機能 PF_INET6 IPv6 プロトコル PF_NATM ATM へのネイティブアクセス PF_ATM ATM PF_NETGRAPH Netgraph ソケット .Ed .Pp ソケットには、通信の種類を指定する .Fa タイプ があります。 現在、定義されているタイプは以下のとおりです: .Pp .Bd -literal -offset indent -compact SOCK_STREAM ストリーム型ソケット SOCK_DGRAM データグラム型ソケット SOCK_RAW 生プロトコルインタフェース SOCK_RDM 伝達が信頼できるパケット SOCK_SEQPACKET 順序付きパケットストリーム .Ed .Pp .Dv SOCK_STREAM タイプは、連続した、信頼性のある、双方向接続ベースの バイトストリームを提供します。 帯域外データ転送メカニズムがサポートされることもあります。 .Dv SOCK_DGRAM ソケットでは、データグラム (コネクションレスで信頼性のない、 最大長が固定の (一般的には小さい) メッセージ) がサポートされます。 .Dv SOCK_SEQPACKET ソケットは、連続した、信頼性のある、双方向接続ベースの 最大長が固定のデータグラムの転送を提供します。 各読取りシステムコールでパケット全体を読み取る必要があるかもしれません。 -この機能はプロトコル固有のもので、現在のところ -.Dv PF_NS -でしか実装されていません。 +この機能はプロトコル固有のもので、現在のところ実装されていません。 .Dv SOCK_RAW ソケットでは、内部ネットワークプロトコルとインタフェースにアクセスできます。 スーパユーザしか使用できない .Dv SOCK_RAW タイプ、および計画されているがまだ実装されていない .Dv SOCK_RDM については、ここでは説明しません。 .Pp .Fa protocol 引数では、ソケットで使用する特定プロトコルを指定します。 通常の場合は、1 つのプロトコルのみが存在して、 指定したプロトコルファミリの特定ソケットタイプをサポートします。 しかし、複数のプロトコルが存在することも可能です。 この場合は、特定プロトコルをこの方法で指定する必要があります。 使用するプロトコル番号は、通信を行う .Dq 通信ドメイン に固有です。 .Xr protocols 5 を参照してください。 .Pp タイプ .Dv SOCK_STREAM のソケットは、パイプに類似した全二重バイトストリームです。 ストリームソケットでは、 .Em 接続済み状態 にしてからデータを送受信する必要があります。 別のソケットへの接続は、 .Xr connect 2 システムコールを呼び出して作成できます。 接続されたら、 .Xr read 2 と .Xr write 2 を呼び出すか、 .Xr send 2 と .Xr recv 2 関数の変種を呼び出してデータを転送できます。 (インターネットファミリなど、一部のプロトコルファミリでは、 .Dq 暗黙接続 という観念がサポートされています。 この接続では、 .Xr sendto 2 システムコールを呼び出し、接続オペレーションに乗せてデータを送信できます。) セッションが終了したら、 .Xr close 2 を実行しても構いません。 帯域外データは、 .Xr send 2 で説明されているように送信し、 .Xr recv 2 で説明されているように受信できます。 .Pp .Dv SOCK_STREAM の実装に使用する通信プロトコルでは、データの喪失や重複がないことが 保証されます。 ピアプロトコルにバッファ空間があるデータの一部を合理的な時間内に 問題なく転送できない場合は、接続が破損したとみなされて呼び出しが エラーとなり、-1 が戻されてグローバル変数 .Va errno に .Er ETIMEDOUT が設定されます。 その他の動作がない場合、プロトコルは約 1 分ごとに転送を強制し、ソケットの .Dq 接続 を任意に維持します。 一定期間 (例えば 5 分間) アイドル接続で応答がない場合はエラーとなります。 破損したストリームでプロセスが送信すると、 .Dv SIGPIPE シグナルが発生します。 この場合、シグナルを処理しないプロセスは終了します。 .Pp .Dv SOCK_SEQPACKET ソケットは、 .Dv SOCK_STREAM ソケットとほぼ同じシステムコールです。 .Xr read 2 を呼び出しても、要求された量のデータしか戻されず、 受信パケットの残りの部分は放棄される点のみが異なります。 .Pp .Dv SOCK_DGRAM ソケットと .Dv SOCK_RAW ソケットでは、 .Xr send 2 の呼び出しで指定された通信相手にデータグラムを送信できます。 一般的にデータグラムは、次のデータグラムのアドレスを戻す .Xr recvfrom 2 で受信されます。 .Pp .Xr fcntl 2 システムコールは、帯域外データを受信した場合の .Dv SIGURG シグナルを受信するプロセスグループを指定できます。 非ブロッキング入出力、および入出力イベントの非同期通知も、 .Dv SIGIO で有効にできます。 .Pp ソケットのオペレーションは、ソケットレベルの .Em オプション で制御されます。 このオプションは、ファイル .Ao Pa sys/socket.h Ac に定義されています。 .Xr setsockopt 2 -はオプションの設定に、 +システムコールはオプションの設定に、 .Xr getsockopt 2 -はオプションの入手に使用します。 +システムコールはオプションの入手に使用します。 .Sh 戻り値 エラーが発生すると -1 が戻されます。 エラーが発生しなかった場合は、ソケットを参照する記述子が戻されます。 .Sh エラー 以下のような場合、 .Fn socket システムコールはエラーになります: .Bl -tag -width Er .It Bq Er EPROTONOSUPPORT プロトコルタイプか指定されたプロトコルがドメインでサポートされていません。 .It Bq Er EMFILE プロセスごとの記述子テーブルが満杯です。 .It Bq Er ENFILE システムファイルテーブルが満杯です。 .It Bq Er EACCES 指定されたタイプやプロトコルのソケットを作成する権限が拒否されました。 .It Bq Er ENOBUFS バッファ空間が不足しています。 充分なリソースが解放されるまでソケットを作成できません。 .El .Sh 関連項目 .Xr accept 2 , .Xr bind 2 , .Xr connect 2 , .Xr getpeername 2 , .Xr getsockname 2 , .Xr getsockopt 2 , .Xr ioctl 2 , .Xr listen 2 , .Xr read 2 , .Xr recv 2 , .Xr select 2 , .Xr send 2 , .Xr shutdown 2 , .Xr socketpair 2 , .Xr write 2 , .Xr getprotoent 3 , .Xr netgraph 4 , .Xr protocols 5 .Rs .%T "An Introductory 4.3 BSD Interprocess Communication Tutorial" .%B PS1 .%N 7 .Re .Rs .%T "BSD Interprocess Communication Tutorial" .%B PS1 .%N 8 .Re .Sh 歴史 .Fn socket システムコールは .Bx 4.2 で登場しました。 diff --git a/ja_JP.eucJP/man/man9/device_get_softc.9 b/ja_JP.eucJP/man/man9/device_get_softc.9 index 353a71a29e..d735334211 100644 --- a/ja_JP.eucJP/man/man9/device_get_softc.9 +++ b/ja_JP.eucJP/man/man9/device_get_softc.9 @@ -1,52 +1,65 @@ .\" -*- nroff -*- .\" .\" Copyright (c) 1998 Doug Rabson .\" .\" All rights reserved. .\" .\" This program is free software. .\" .\" 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 DEVELOPERS ``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 DEVELOPERS 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 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" %FreeBSD: src/share/man/man9/device_get_softc.9,v 1.7 2001/10/01 16:09:24 ru Exp % +.\" %FreeBSD: src/share/man/man9/device_get_softc.9,v 1.8 2003/03/28 07:28:31 imp Exp % .\" .\" $FreeBSD$ .Dd June 16, 1998 .Dt DEVICE_GET_SOFTC 9 .Os .Sh 名称 .Nm device_get_softc .Nd ドライバの私的なインスタンス変数へのアクセス .Sh 書式 .In sys/param.h .In sys/bus.h .Ft void * .Fn device_get_softc "device_t dev" .Sh 解説 -デバイスのドライバ固有のインスタンス変数を返します。 +デバイス +.Fa dev +のドライバ固有の状態を返します。  +この softc は最初に要求された時に自動的に割り当てられます。 +割り当ての大きさは、ドライバを定義するために使用されるデバイスの +.Ft driver_t +情報によって決定されます。 +softc は一般的に、デバイスの実体の状態をカプセル化します。 +.Pp +ドライバ設計者が、独自の softc 管理メカニズムを使用することは推奨されません。 +ドライバ設計者は、この関数より以前のツリーの中のドライバで見つけた、 +このようなメカニズムをコピーするべきではありません。 .Sh 戻り値 デバイス固有のインスタンス変数へのポインタが返されます。 .Sh 関連項目 -.Xr device 9 +.Xr driver 9 , +.Xr device 9 , +.Xr device_set_softc 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/malloc.9 b/ja_JP.eucJP/man/man9/malloc.9 index d806c4c16f..64633d55e2 100644 --- a/ja_JP.eucJP/man/man9/malloc.9 +++ b/ja_JP.eucJP/man/man9/malloc.9 @@ -1,280 +1,302 @@ .\" Copyright (c) 1996 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This code is derived from software contributed to The NetBSD Foundation .\" by Paul Kranenburg. .\" .\" 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. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the NetBSD .\" Foundation, Inc. and its contributors. .\" 4. Neither the name of The NetBSD Foundation nor the names of its .\" contributors may be used to endorse or promote products derived .\" from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 REGENTS 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 OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" .\" $NetBSD: malloc.9,v 1.3 1996/11/11 00:05:11 lukem Exp $ .\" %FreeBSD: src/share/man/man9/malloc.9,v 1.29 2003/02/05 14:00:46 charnier .\" $FreeBSD$ .\" .Dd June 16, 1996 .Dt MALLOC 9 .Os .Sh 名称 .Nm malloc , .Nm MALLOC , .Nm free , .Nm FREE .Nd カーネルメモリマネージメントルーチン .Sh 書式 .In sys/types.h .In sys/malloc.h .Ft void * .Fn malloc "unsigned long size" "struct malloc_type *type" "int flags" .Fn MALLOC "space" "cast" "unsigned long size" "struct malloc_type *type" "int flags" .Ft void .Fn free "void *addr" "struct malloc_type *type" .Fn FREE "void *addr" "struct malloc_type *type" .Ft void * .Fn realloc "void *addr" "unsigned long size" "struct malloc_type *type" "int flags" .Ft void * .Fn reallocf "void *addr" "unsigned long size" "struct malloc_type *type" "int flags" .Sh 解説 .Fn malloc 関数はカーネルアドレス空間の初期化されていないメモリを .Fa size で指定された大きさの 1 つのオブジェクトとして割り当てます。 .Pp .Fn free 関数は .Fn malloc で先に割り当てられていた .Fa addr のアドレスのメモリを再使用するために解放します。 メモリは 0 にクリアされません。 .Fa addr が .Dv NULL の場合、 .Fn free は何もしません。 .Pp .Fn realloc 関数は、以前に割り当てられて .Fa addr で参照されるメモリの大きさを .Fa size バイトに変更します。 メモリの内容は、新サイズと旧サイズの小さい方までは、無変更となります。 戻り値は .Fa addr と違うかもしれないことに注意してください。 要求されたメモリが割り当て不能の場合、 .Dv NULL が返され、 .Fa addr で参照されるメモリは正当で無変更のままとなります。 .Fa addr が .Dv NULL の場合、 .Fn realloc 関数は指定された大きさの .Fn malloc と同等に振舞います。 .Pp .Fn reallocf 関数は .Fn realloc とまったく同じですが、 要求されたメモリを割り当て不能の場合に 渡されたポインタのメモリを解放する点が違います。 .Pp マクロ版の .Fn MALLOC は機能的には .Bd -literal -offset indent (space) = (cast)malloc((u_long)(size), type, flags) .Ed .Pp と同等で、 マクロ版 .Fn FREE は .Bd -literal -offset indent free((addr), type) .Ed .Pp と同等です。 標準Cライブラリの同義関数 .Pq Xr malloc 3 とは異なり、カーネルバージョンは更に 2 つの引数をとります。 引数 .Fa flags は .Fn malloc の操作上の特性を以下のようにみなします。 .Bl -tag -width indent .It Dv M_ZERO 割り当てられたメモリが全て 0 で満たされるようにします。 .It Dv M_NOWAIT リソースの不足のため直ちに要求を満たすことができない場合は、 .Fn malloc , .Fn realloc , および .Fn reallocf が .Dv NULL を返すようにします。 通常は、 他のプロセスによるリソースの解放を待つためにスリープ状態にされます。 このフラグがセットされていれば、 .Fn malloc はブロックせずに .Dv NULL を返します。 -割り込みコンテキストでの動作時には .Dv M_NOWAIT -が必要であることに注意してください。 +が 0 に定義されているということは、ブロッキング操作がデフォルトであることを +意味することに注意してください。 +また、割り込みコンテキストでの動作時には +.Dv M_NOWAIT +が必要であることにも注意してください。 +.Pp +プログラマは、 +.Fn malloc +フラグ +.Dv M_NOWAIT +と +.Xr mbuf 9 +の割り当てフラグ +.Dv M_DONTWAIT +を、混乱しないようにするべきです。 +後者は +.Fn malloc +にとって有効ではない引数です。 +.It Dv M_WAITOK +はリソースを待つことが OK であることを示します。 +これは都合の悪いことに 0 として定義されていますので、 +この値を直接比較すること、またはフラグとして AND をとろうとすることを +決して行なわないように注意が払われるべきです。 +デフォルトの操作はメモリ割り当てが成功するまでブロックされます。 .Dv M_NOWAIT が指定されると .Fn malloc , .Fn realloc , .Fn reallocf 関数は単に .Dv NULL を返すことが出来ます。 .It Dv M_USE_RESERVE 要求されたメモリを獲得するために、 システムがリザーブ領域を使ってよいことを示します。 このオプションは以前は M_KERNEL と呼ばれていましたが、 より明示的に改名されました。 このオプションは軽視されていて、カーネルから徐々に削除されています。 そのため、新たなプログラミングでは使用されない様にするべきです。 .El .Pp 引数 .Fa type はメモリの利用方法の統計をとるためと、 簡単なサニティチェックのために使われています。 この統計は .Sq vmstat -m で調べることが出来ます。 .Pp .Fa type は .Fn MALLOC_DECLARE と .Fn MALLOC_DEFINE マクロを通じて .Va malloc_type_t typedef を使用して定義されます。 .Bd -literal -offset indent /* sys/something/foo_extern.h */ MALLOC_DECLARE(M_FOOBUF); /* sys/something/foo_main.c */ MALLOC_DEFINE(M_FOOBUF, "foobuffers", "Buffers to foo data into the ether"); /* sys/something/foo_subr.c */ \&... MALLOC(buf, struct foo_buf *, sizeof *buf, M_FOOBUF, M_NOWAIT); .Ed .Sh 戻り値 .Fn malloc , .Fn realloc , .Fn reallocf 関数はすべてのタイプのオブジェクトの格納に適切なように整列された カーネル仮想アドレスを返すか、 または要求が満足できず (すなわち .Dv M_NOWAIT がセットされていることを意味します) に .Dv NULL を返します。 .Sh 実装に関する注 1 ページまでの要求に対し、 メモリアロケータは、2 の累乗の大きさの量を割り当てます。 より大きな要求に対しては、1 個以上のページが割り当てられます。 この動作に依存してはなりませんが、 この情報がメモリ使用効率の最適化に有用かもしれません。 .Pp 以上に記載された malloc のフラグは、望まれていない結果を引き起こすため、 .Xr mbuf 9 のルーチンと一緒に使用されるべき .Em ではありません 。 .Pp .Xr vnode 9 インタロックを保持している時の .Fn malloc または .Fn free への全ての呼出しは、VM オブジェクトと vnode の相互獲得のために、 LOR (ロック順序の逆転) を引き起こします。 .Sh 関連項目 .Xr vmstat 8 , .Xr vnode 9 .Sh 診断 .Dv DIAGNOSTIC コンフィギュレーションオプションを付けてコンパイルされたカーネルは、 割り当てられた領域以外への書き込みや .Fn malloc 関数と .Fn free 関数の不均衡な呼び出しなどにより生じたメモリ不正の検出を試みます。 一貫性チェックの失敗はパニックまたはシステムコンソールメッセージを出力します。 .Bl -bullet -offset indent -compact .Pp .It panic: .Dq malloc: bogus type .It panic: .Dq malloc: allocation too large .It panic: .Dq malloc: wrong bucket .It panic: .Dq malloc: lost data .It panic: .Dq free: address 0x%x out of range .It panic: .Dq free: type %d out of range .It panic: .Dq free: unaligned addr Aq description of object .It panic: .Dq free: item modified .It panic: .Dq free: multiple free[s] .It .Dq Data modified on freelist: Aq description of object .El diff --git a/ja_JP.eucJP/man/man9/sleep.9 b/ja_JP.eucJP/man/man9/sleep.9 index 115fbf23a1..a2e4ac5b88 100644 --- a/ja_JP.eucJP/man/man9/sleep.9 +++ b/ja_JP.eucJP/man/man9/sleep.9 @@ -1,157 +1,157 @@ .\" .\" Copyright (c) 1996 Joerg Wunsch .\" .\" 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 DEVELOPERS ``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 DEVELOPERS 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 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" %FreeBSD: src/share/man/man9/sleep.9,v 1.38 2003/02/04 08:53:45 guido Exp % .\" $FreeBSD$ .\" " .Dd December 17, 1998 .Os .Dt SLEEP 9 .Sh 名称 .Nm sleep , .Nm msleep , .Nm tsleep , .Nm wakeup .Nd イベントのウェイト .Sh 書式 .In sys/param.h .In sys/systm.h .In sys/proc.h .Ft int .Fn tsleep "void *ident" "int priority" "const char *wmesg" "int timo" .Ft int .Fn msleep "void *ident" "struct mtx *mtx" "int priority" "const char *wmesg" "int timo" .Ft void .Fn wakeup "void *ident" .Ft void .Fn wakeup_one "void *ident" .Sh 解説 関数 .Fn tsleep および .Fn wakeup はイベントに基づいたプロセスのブロックを取り扱います。 プロセスが外部イベントを待たなければならない場合には、そのプロセスは -.Nm tsleep +.Fn tsleep によってスリープ状態に置かれます。 パラメータ .Ar ident は、プロセスがどのイベント上でスリープしているかを識別する一意的な 任意のアドレスです。 単一の .Ar ident 上でスリープしている全てのプロセスは後で、 -.Nm wakeup +.Fn wakeup によって起こされます。これは、しばしば割り込みルーチンの中から呼び出され、 プロセスがブロックしているリソースが現在利用可能になったことを示します。 .Pp パラメータ .Ar wmesg は .Xr ps 1 のようなツールのためのスリープ状態を解説する文字列です。 これらのプログラムの任意の文字列を表示するための領域の制限のため、 このメッセージは 6 文字を超えるべきではありません。 .Pp .Fn wakeup_one 関数はパラメータ .Fa ident 上でスリープしているキューの中の最初のプロセスを実行可能に するために使用されます。 これは、多数のプロセスが同じアドレス上でスリープしているが、 実行可能となったときその中の 1 つのみが実際には役に立つ作業ができるときに、 システムが飽和することを防ぐことが可能です。 .Pp -.Nm tsleep +.Fn tsleep 関数は一般的なスリープの呼び出しです。 明示された識別子上の wakeup が実行されるまでの間、 現在のプロセスを一時停止させます。 それからそのプロセスは明示された優先度 .Ar priority で実行可能にされます。 長くて .Ar timo \&/ hz 秒間 (0 はタイムアウトなしを意味します) スリープします。 .Ar pri が .Dv PCATCH フラグを含む場合には、スリープの前後でシグナルがチェックされます。 そうでない場合には、シグナルはチェックされません。 起こされた場合には 0 を返し、タイムアウトが経過した場合には .Er EWOULDBLOCK を返します。 .Dv PCATCH が設定されていてシグナルが配信される必要がある場合で、 可能であれば現在のシステムコールが再開始されるべきである場合には .Er ERESTART が返され、 .Er ( EINTR を返す) シグナルによってそのシステムコールが中断されるべき場合には .Er EINTR が返されます。 .Pp -.Nm msleep +.Fn msleep 関数は tsleep の変種です。パラメータ .Ar mtx は、スリープの前に抜け、 -.Nm msleep +.Fn msleep が戻る前に入る mutex です。 .Ar pri が .Dv PDROP フラグを含む場合には、戻る前に .Ar mtx 引数へ入りません。 ある状態を不可分にチェックできることを保証し、 その状態の変更も対応する wakeup も失うことなく 現在のプロセスを中断できることを保証するために、 この mutex は使用されます。 .Sh 戻り値 上記を参照してください。 .Sh 関連項目 .Xr ps 1 , .Xr malloc 9 , .Xr mi_switch 9 .Sh 歴史 sleep/wakeup プロセス同期機構はとても古いです。 これはとても早期のバージョンの .Ux で登場しました。 .Pp -.Nm tsleep +.Fn tsleep 関数は .Bx 4.4 で登場しました。 .Pp -.Nm +.Fn sleep 関数は伝統的な形式のために使用されます。 これはタイムアウトまたは .Ar wmesg を明示させないため、中止されています。 .Sh 作者 .An -nosplit このマニュアルページは .An J\(:org Wunsch Aq joerg@FreeBSD.org が書きました。 diff --git a/ja_JP.eucJP/man/man9/style.9 b/ja_JP.eucJP/man/man9/style.9 index 004e33a2a6..2004bd8470 100644 --- a/ja_JP.eucJP/man/man9/style.9 +++ b/ja_JP.eucJP/man/man9/style.9 @@ -1,787 +1,787 @@ .\" Copyright (c) 1995-2001 FreeBSD Inc. .\" 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 [your name] 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 OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %FreeBSD: src/share/man/man9/style.9,v 1.98 2002/12/27 12:15:34 schweikh Exp % .\" $FreeBSD$ .\" .Dd December 7, 2001 .Dt STYLE 9 .Os .Sh 名称 .Nm style .Nd カーネルソースファイルのスタイルガイド .Sh 解説 このファイルは .Fx ソースツリーのカーネルソースに好ましいスタイルを明記しています。 これはユーザランドのコードスタイルの手引きでもあります。 例において、スタイル規則の多くを暗黙的に使用しています。 .Nm がこれらの事例について言及していないと決め付ける前に、 注意して例を確認してください。 .Nm はそのような事柄については記述していません。 .\" $ と FreeBSD を続けるとキーワード置換されるので、\& を挿入 .\" 2001/05/23 horikawa@jp.FreeBSD.org .Bd -literal /* * FreeBSD のためのスタイルガイドです。 * CSRG の KNF (Kernel Normal Form, カーネル標準書式) に基づいています。 * * @(#)style 1.14 (Berkeley) 4/28/95 - * $\&FreeBSD: src/share/man/man9/style.9,v 1.98 2002/12/27 12:15:34 schweikh Exp $ + * $\&FreeBSD: src/share/man/man9/style.9,v 1.100 2003/03/25 19:46:55 jhb Exp $ */ /* * とても重要な 1 行のコメントはこのようにします。 */ /* 殆どの 1 行のコメントはこのようにします。 */ /* * 複数行にわたるコメントはこのようにします。実際の文章を書きます。実際の * 段落に見えるように埋めていきます。 */ .Ed .Pp 著作権ヘッダの後には空行を 1 行入れ、ソースファイルには .Va rcsid を付けます。 バージョン管理システムの ID タグは、ファイル中に 1 個のみあるべきです (このファイルでは違いますが)。 C/C++ ソースファイル以外はこの例に従いますが、 C/C++ ソースファイルは以降の例に従います。 外部から入手したファイルの すべての VCS (バージョン管理システム) リビジョン識別子は、 存在すれば維持します。 これには、ファイルの来歴を示す複数の ID も含みます。 一般的に、外来の ID またはその下部構造は編集しません。 さもなければ .Dq Li ( "#if defined(LIBC_SCCS)" のように) 囲まれていない場合には、全ての互換性のない小片を隠すため、および その ID をオブジェクトファイルから追い出しておくために、両方を .Dq Li "#if 0 ... #endif" の中に囲みます。 ファイルの名前が変更された場合には、外来の VCS ID の前に .Dq Li "From: " のみを追加します。 .Bd -literal #if 0 #ifndef lint static char sccsid[] = "@(#)style 1.14 (Berkeley) 4/28/95"; #endif /* not lint */ #endif #include __FBSDID("$\&FreeBSD: src/share/man/man9/style.9,v 1.98 2002/12/27 12:15:34 schweikh Exp $"); .Ed .Pp ヘッダファイルの前に、空行を 1 行付けます。 .Pp カーネルのインクルードファイル (すなわち、 .Pa sys/*.h ) が初めに来ます。 通常、 .Aq Pa sys/types.h または .Aq Pa sys/param.h のどちらかが必要ですが、 両方は必要ないでしょう。 .Aq Pa sys/types.h は .Aq Pa sys/cdefs.h をインクルードしており、 依存関係は問題ありません。 .Bd -literal #include /* 山括弧による非ローカルインクルード */ .Ed .Pp ネットワークプログラムである場合は、 次にネットワークインクルードファイルを置きます。 .Bd -literal #include #include #include #include #include .Ed .Pp カーネル用のファイルには、 .Pa /usr/include 中のファイルを使用しないでください。 .Pp それから空行を置き、 .Pa /usr インクルードファイルを続けます。 .Pa /usr インクルードファイルはアルファベット順にソートされているべきです。 .Bd -literal #include .Ed .Pp グローバルなパス名は .Pa /usr/include/paths.h で定義されています。 プログラムにローカルなパス名はローカルディレクトリの .Qq Pa pathnames.h に入れます。 .Bd -literal #include .Ed .Pp それから、空行があって、ユーザインクルードファイルが来ます。 .Bd -literal #include "pathnames.h" /* " " によるローカルインクルード */ .Ed .Pp アプリケーションインタフェースを実装している場合を除き、 実装の名前空間で .Ic #define したり名前を定義したりしてはいけません。 .Pp .Dq Li 安全でない マクロ (副作用を持っているもの) の名前と、 明らかな定数のマクロの名前はすべて大文字です。 式のように展開されるマクロは、単一のトークンにするか外側に括弧をつけます。 .Ic #define とマクロ名の間にタブ文字を 1 個入れます。 マクロがある関数のインライン展開である場合は、 関数名は全て小文字で、マクロはすべて大文字の同じ名前を持ちます。 .\" XXX 上記は名前が同じマクロを #undef すれば関数を使える .\" という ANSI のスタイルと衝突します。 .\" これは MALLOC() については言えないし、インライン関数を使う時の .\" 一般的なやりかたではありません。 バックスラッシュは右揃えします。こうすると読みやすくなります。 マクロが複合文をカプセル化する場合には、それを .Ic do ループで囲みます。 これにより、 .Ic if 文で安全に使用できます。 最後の文の終端のセミコロンは、 マクロではなくマクロの実施時に付けられるべきです。 これにより、清書器やエディタで文法解析しやすくなります。 .Bd -literal #define MACRO(x, y) do { \e variable = (x) + (y); \e (y) += 2; \e } while (0) .Ed .Pp コードが .Ic #ifdef または .Ic #if を使用して条件付きでコンパイルされるときには、 どこで条件付きでコンパイルされるコードが終了するのかを 読む人が容易に識別することが可能にするために、それに続く適合する .Ic #endif または .Ic #else にコメントを追加しても構いません。 このコメントは (主観的に) 長い部分、20 行以上の部分、またはネストされた .Ic #ifdef の連続が読む人を混乱させるかもしれないとき、にのみ使用されるべきです。 たとえコンパイルされない領域が小さくなるかもしれないでも、 .Xr lint 1 の目的のために条件付きでコンパイルされない個所のために、 例外が作られても構いません。 そのコメントは .Ic #endif または .Ic #else から 1 つの空白によって分離されるべきです。 短い条件付きでコンパイルされる部分のために、 終わりのコメントを使用するべきではありません。 .Pp .Ic #endif のためのコメントは対応する .Ic #iF または .Ic #ifdef で使用されている表現に合わせるべきです。 .Ic #else および .Ic #elif のためのコメントは先行する .Ic #if および/または .Ic #elif 文に使用されている表現の反対に合わせるべきです。 コメントの中では、補助表現 .Dq Li defined(FOO) は .Dq Li FOO と省略されます。 コメントの目的のためには、 .Dq Ic #ifndef Li FOO は .Dq Ic #if Li !defined(FOO) とみなされます。 .Bd -literal #ifdef KTRACE #include #endif #ifdef COMPAT_43 /* 大きな部分が、または他の条件付きのコードがここに */ #else /* !COMPAT_43 */ /* またはここに */ #endif /* COMPAT_43 */ #ifndef COMPAT_43 /* 更に別の大きな部分が、または他の条件付きのコードがここに */ #else /* COMPAT_43 */ /* またはここに */ #endif /* !COMPAT_43*/ .Ed .Pp 列挙値は全て大文字を使用します。 .Bd -literal enum enumtype { ONE, TWO } et; .Ed .Pp 宣言の中では、型に関係付けられたトークンを除いて、 アスタリスクと隣接したトークンの間には空白文字を置きません。 (これらの識別子は基本の型の名前、型の修飾語句、および今宣言されようとしている もの以外の .Ic typedef 名です。) これらの識別子はアスタリスクから 1 つの空白で分離します。 .Pp 構造体の中で変数を宣言する時には、 使用順、サイズ順、アルファベット順にソートして宣言します。 最初の区分は通常適用しませんが、例外があります。 各宣言は、それぞれ独立した行にて行います。 構造体の名前の位置を、あなたの判断で読み易いように、 タブ 1 個または 2 個を使用して揃えてください。 少なくとも 90% のメンバの名前を揃えるのに十分な場合には、 1 つだけのタブを使用するべきです。 非常に長い型の後の名前は、単一の空白で区切られるべきです。 .Pp 重要な構造体は、それが使用されるファイルの先頭で宣言されるか、 複数のソースファイルで使用される場合は別のヘッダファイルで宣言されるべきです。 構造体がヘッダファイルで宣言されている場合には、 それら構造体の使用は、宣言とは分けられるべきで、かつ .Ic "extern であるべきです。 .Bd -literal struct foo { struct foo *next; /* 使用中の foo のリスト */ struct mumble amumble; /* mumble のコメント */ int bar; /* コメントを揃えようとしています */ struct verylongtypename *baz; /* タブ 2 個には収まりません */ }; struct foo *foohead; /* グローバルな foo リストの先頭 */ .Ed .Pp 可能な時には必ず、あなた自身でリストを操作するのではなく、 .Xr queue 3 マクロを使用してください。 従って、前の例をより良く書くと次のようになります。 .Bd -literal #include struct foo { LIST_ENTRY(foo) link; /* foo リストにキューマクロを使用 */ struct mumble amumble; /* mumble のコメント */ int bar; /* コメントを揃えようとしています */ struct verylongtypename *baz; /* タブ 2 個には収まりません */ }; LIST_HEAD(, foo) foohead; /* グローバルな foo リストの先頭 */ .Ed .Pp 構造体の型に typedef を使用する事は避けてください。 使用してしまうと、 構造体へのポインタを不透明 (opaque) に使用することが、 アプリケーションにとって不可能となります。 通常の struct タグを使用すると、これが可能となり、かつ有益です。 規約が .Ic typedef を要求する場合には、その名前を構造体タグに一致させます。 標準 C または .Tn POSIX によって明示されたものを除いては、 .Dq Li _t で終る typedef を避けてください。 .Bd -literal /* 構造体名と typedef を一致させます */ typedef struct bar { int level; } BAR; typedef int foo; /* これは foo です */ typedef const long baz; /* これは baz です */ .Ed .Pp 全ての関数はどこかでプロトタイプされます。 .Pp 私的な関数 (すなわち、他のどこでも使用されない関数など) の関数プロトタイプは、 最初のソースモジュールの先頭に置かれます。 単一のソースモジュールにローカルな関数は、 .Ic static で宣言されるべきです。 .Pp カーネルの別の部分から使用される関数は、 関連のあるインクルードファイルの中でプロトタイプされます。 関数プロトタイプは、異なる順序の使用を強制する理由がない場合には、 なるべくアルファベット順の論理的な順序で整列されるべきです。 .Pp 複数のモジュールでローカルに使用される関数は、 .Qq Pa extern.h 等の分離したヘッダファイルの中に置かれます。 .Pp .Dv __P マクロは使用しません。 .Pp ファイルの 50% かそれ以上を巻き込んだ修正の場合は、 一般にコードは .Dq 新しいコード とみなすことができます。 これは既存のコードの慣例を破り、 現在の .Nm ガイドラインを使用するのに十分です。 .Pp カーネルはパラメータの型に関連付けられた名前を持ちます。 例えば、カーネル内でこのように使用します。 .Bd -literal void function(int fd); .Ed .Pp ユーザランドのアプリケーションに対して見えるヘッダファイルの中では、 可視のプロトタイプは、 型を伴った .Dq 保護された (アンダスコアで開始する) 名前を使用するか、 型だけで名前を使用しないかのどちらかが必要です。 保護された名前の使用がより望ましいです。 例えば、このように使用します。 .Bd -literal void function(int); .Ed .Pp または .Bd -literal void function(int _fd); .Ed .Pp プロトタイプは関数名の行揃えを行なうために、タブの後に追加のスペース文字を 置いても構いません。 .Bd -literal static char *function(int _arg, const char *_arg2, struct foo *_arg3, struct bar *_arg4); static void usage(void); /* * 全ての主要なルーチンはそれが何をするのかを簡潔に記述した * コメントを持つべきです。"main" ルーチンの前のコメントは * そのプログラムが何をするのかを記述するべきです。 */ int main(int argc, char *argv[]) { char *ep; long num; int ch; .Ed .Pp 一貫性のために、オプションの解析には .Xr getopt 3 が使用されるべきです。 .Xr getopt 3 呼び出しと .Ic switch 文では、オプションをソートすべきですが、 .Ic switch 文のカスケードの一部の場合は例外です。 .Ic switch 文のカスケード要素は .Li FALLTHROUGH コメントを持つべきです。 数値の引数は精度をチェックされるべきです。 到達できないコードは .Li NOTREACHED コメントを持つべきです。 .Bd -literal while ((ch = getopt(argc, argv, "abn:")) != -1) switch (ch) { /* switch をインデント */ case 'a': /* case はインデントしない */ aflag = 1; /* FALLTHROUGH */ case 'b': bflag = 1; break; case 'n': num = strtol(optarg, &ep, 10); if (num <= 0 || *ep != '\e0') { warnx("illegal number, -n argument -- %s", optarg); usage(); } break; case '?': default: usage(); /* NOTREACHED */ } argc -= optind; argv += optind; .Ed .Pp 予約語 .Pq Ic if , while , for , return , switch の後にスペースを入れます。 何も伴わないかただ 1 つの文を伴う制御文は、ブレース .Ql ( \&{ および .Ql \&} ) を使用しません。 1 つの文が 複数行である文の場合には、これは許されます。 無限ループは .Ic while ではなく .Ic for で行ないます。 .Bd -literal for (p = buf; *p != '\e0'; ++p) ; /* 何もなし */ for (;;) stmt; for (;;) { z = a + really + long + statement + that + needs + two + lines + gets + indented + four + spaces + on + the + second + and + subsequent + lines; } for (;;) { if (cond) stmt; } if (val != NULL) val = realloc(val, newsize); .Ed .Pp .Ic for ループの各部は空のまま残しても構いません。 異常に複雑なルーチンでない限りは、ブロックの中に宣言を置いてはなりません。 .Bd -literal for (; cnt < 15; cnt++) { stmt1; stmt2; } .Ed .Pp インデントは 8 文字のタブです。 第 2 レベルのインデントは 4 文字のスペースです。 長い分を折り返す必要がある場合、オペレータを行末に置きます。 .Bd -literal while (cnt < 20 && this_variable_name_is_too_long && ep != NULL) z = a + really + long + statement + that + needs + two + lines + gets + indented + four + spaces + on + the + second + and + subsequent + lines; .Ed .Pp 空白文字を行末に追加してはいけません。 また、インデントを形成するためには、タブとその後にスペースのみを使用します。 タブが生み出す以上のスペースや、タブの前のスペースは使用しません。 .Pp ブレースの終了と開始は .Ic else と同じ行に置かれます。 必要でないブレースは省いても構いません。 .Bd -literal if (test) stmt; else if (bar) { stmt; stmt; } else stmt; .Ed .Pp 関数名の後はスペースを空けません。 コンマの後にはスペースを持ちます。 .Ql \&( または .Ql \&[ の後ろまたは .Ql \&] または .Ql \&) の前にはスペースを空けません。 .Bd -literal error = function(a1, a2); if (error != 0) exit(error); .Ed .Pp 単項演算子はスペースを要求しませんが、二項演算子は要求します。 優先順位が要求する場合または文が括弧なしでは混乱する場合以外は、 括弧は使用しません。 他人はあなたよりも混乱しやすいかもしれないということを覚えておいてください。 あなたは以下を理解できますか? .Bd -literal a = b->c[0] + ~d == (e || f) || g && h ? i : j >> 1; k = !(l & FLAGS); .Ed .Pp 成功時には 0 で、または .Xr sysexits 3 にあらかじめ定義してある値で exit するべきです。 .Bd -literal exit(EX_OK); /* * "Exit 0 on success." (成功時は 0 で終了) * の様に明白なコメントは避けてください */ } .Ed .Pp 関数の型は、関数自身に先行する行にあるべきです。 関数の本体の開始のブレースは、単独で 1 行であるべきです。 .Bd -literal static char * function(int a1, int a2, float fl, int a4) { .Ed .Pp 関数の中で変数を宣言する時には、サイズ順に、次にアルファベット順に ソートして宣言します。 1 行に複数の宣言は可能です。 行が溢れる場合は、型の予約語を再度使用します。 .Pp 宣言時に変数を初期化することによってコードを 不明瞭にしない様に注意してください。 この機能は良く考えて使用してください。 初期化に関数呼び出しを使用しないでください。 .Bd -literal struct foo one, *two; double three; int *four, five; char *six, seven, eight, nine, ten, eleven, twelve; four = myfunction(); .Ed .Pp 他の関数の内部で関数を宣言しないでください。 ANSI C によると、このような宣言は、宣言のネスティングによらず、 ファイルスコープになります。 ローカルスコープに見えるものの中にファイルの宣言を隠すことは好ましくなく、 良いコンパイラは苦情を言います。 .Pp キャストと .Ic sizeof 演算子の後にはスペースを続けません。 この規則は .Xr indent 1 が理解しないことに注意してください。 .Ic sizeof は常に括弧をつけて書かれます。 冗長な括弧の規則は .Fn sizeof var の事例には適用されません。 .Pp .Dv NULL は、好まれるヌルポインタ定数です。 コンパイラが型を知っている文脈、例えば代入では、 .Vt ( "type *" ) Ns 0 または .Vt ( "type *" ) Ns Dv NULL の代わりに、 .Dv NULL を使用します。 他の文脈では、特に全ての関数の引数では、 .Vt ( "type *" ) Ns Dv NULL を使用します。 (関数のプロトタイプがスコープ外かもしれない場合に、 キャストはいろいろな引数にとって必須で、その他の引数にとっても必要です。) ポインタは .Dv NULL と比較します。例えば、 .Bd -literal !(p = f()) .Ed .Pp ではなく、このように使います。 .Bd -literal (p = f()) == NULL .Ed .Pp 真理値ではない場合、テストには .Ic \&! を使用しないでください。 例えば、下記のように使います。 .Bd -literal if (*p == '\e0') .Ed .Pp 下記のようには使いません。 .Bd -literal if (!*p) .Ed .Pp .Vt "void *" を返すルーチンでは、 戻り値をどのポインタ型にもキャストしてはなりません。 .Pp .Ic return 文の値は括弧で囲まれているべきです。 .Pp .Xr err 3 または .Xr warn 3 を使用し、勝手に作らないでください。 .Bd -literal if ((four = malloc(sizeof(struct foo))) == NULL) err(1, (char *)NULL); if ((six = (int *)overflow()) == NULL) errx(1, "number overflowed"); return (eight); } .Ed .Pp 古いスタイルの関数宣言はこのようになっています。 .Bd -literal static char * function(a1, a2, fl, a4) int a1, a2; /* int 型も宣言します、デフォルトにしないこと */ float fl; /* double と float の違いに気を付けてください */ int a4; /* 出てきた順に宣言します */ { .Ed .Pp あなたが明確に K&R との互換性を必要とする場合以外は、 ANSI の関数宣言を使用してください。 長いパラメータリストの折り返しには、 4 個の空白による通常のインデントを付けます。 .Pp 可変個数の引数はこのようにします。 .Bd -literal #include void vaf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); STUFF; va_end(ap); /* void 型の関数に return は不要です */ } static void usage() { /* 関数がローカル変数を持たない場合、空行をいれます */ .Ed .Pp .Xr fputs 3 , .Xr puts 3 , .Xr putchar 3 等ではなく、 .Xr printf 3 を使用してください。 これは速くて大抵はきれいで、言うまでもなくつまらないバグを避けます。 .Pp 使用法 (usage) の文はマニュアルページの .Sx SYNOPSIS (書式) の様であるべきです。 使用法の文は、次の構造であるべきです: .Bl -enum .It オペランドの無いオプションが、最初にアルファベット順に、 1 組の大括弧 .Ql ( \&[ と .Ql \&] ) でくくられます。 .It オプションとそのオペランドがこれもアルファベット順に続き、 それぞれのオプションとその引数を 1 組の大括弧でくくります。 .It 必須の引数 (もしあれば) が続き、 コマンドラインで指定されるべき順で一覧されます。 .It 最後に、 すべての任意の引数が指定されるべき順で、 すべて大括弧の中に一覧されます。 .El .Pp 縦棒 .Pq Ql \&| は、 .Dq 二者択一 のオプションまたは引数を分割し、 同時に使用するオプションと引数は、単一の大括弧でくくります。 .Bd -literal -offset 4n "usage: f [-aDde] [-b b_arg] [-m m_arg] req1 req2 [opt1 [opt2]]\en" "usage: f [-a | -b] [-c [-dEe] [-n number]]\en" .Ed .Bd -literal (void)fprintf(stderr, "usage: f [-ab]\en"); exit(EX_USAGE); } .Ed .Pp マニュアルページのオプション記述は、 純粋なアルファベット順であるべきであることに注意してください。 つまり、オプションが引数を取るか否かに関わらないということです。 アルファベット順は、前述の大文字小文字の順序を考慮に入れるべきです。 .Pp 新しい中心的なカーネルのコードは、適度に .Nm ガイドに従うべきです。 サードパーティが保守するモジュールやデバイスドライバのためのガイドラインは より緩やかですが、最低限内部的には彼らの一貫したスタイルであるべきです。 .Pp ソースリポジトリの文体の変更 (空白文字の変更を含む) は困難で、 正当な理由なしには避けるべきです。 リポジトリの中のおおよそ KNF .Nm に適合しているコードは、この適合から離れてはなりません。 .Pp 可能な時にはいつでも、 コードはコードチェッカ (例えば、 .Xr lint 1 または .Nm gcc Fl Wall ) を 通過し、発生する警告は最小限となるべきです。 .Sh 関連項目 .Xr indent 1 , .Xr lint 1 , .Xr err 3 , .Xr sysexits 3 , .Xr warn 3 .Sh 歴史 このページは .Bx 4.4 Lite2 リリースの .Pa src/admin/style/style ファイルに大きく基づいていて、 現在の実装と .Fx プロジェクトの要望を反映して、頻繁に更新しています。 diff --git a/ja_JP.eucJP/man/man9/uio.9 b/ja_JP.eucJP/man/man9/uio.9 index 7eb113da53..8162104f3e 100644 --- a/ja_JP.eucJP/man/man9/uio.9 +++ b/ja_JP.eucJP/man/man9/uio.9 @@ -1,178 +1,178 @@ .\" .\" Copyright (c) 1997 Joerg Wunsch .\" .\" 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 DEVELOPERS ``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 DEVELOPERS 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 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" %FreeBSD: src/share/man/man9/uio.9,v 1.13 2002/06/20 07:09:24 peter Exp % +.\" %FreeBSD: src/share/man/man9/uio.9,v 1.14 2003/03/03 10:49:37 des Exp % .\" .\" .\" $FreeBSD$ .Dd February 2, 1997 .Os .Dt UIO 9 .Sh 名称 .Nm uio , .Nm uiomove .Nd デバイスドライバ入出力ルーチン .Sh 書式 .In sys/types.h .In sys/uio.h .Pp .Bd -literal struct uio { struct iovec *uio_iov; int uio_iovcnt; off_t uio_offset; int uio_resid; enum uio_seg uio_segflg; enum uio_rw uio_rw; struct thread *uio_td; }; .Ed .Ft int -.Fn uiomove "caddr_t buf" "int howmuch" "struct uio *uiop" +.Fn uiomove "void *buf" "int howmuch" "struct uio *uiop" .Sh 解説 .Fn uiomove 関数は、ユーザ空間とカーネル空間の境界を越えることさえ可能で、 バッファと入出力ベクタ間のデータ転送の実行に使用されます。 .Pp 文字型デバイスのドライバに渡された、あらゆる .Xr read 2 , .Xr write 2 , .Xr readv 2 ないし .Xr writev 2 システムコールの結果として、適切なドライバの .Va d_read または .Va d_write エントリが .Vt "struct uio" 構造体のポインタを渡されて呼び出されます。 転送のリクエストは、この構造体の中にエンコードされます。 ドライバ自身もこの構造体の中のデータを取り出すために .Fn uiomove を使用するべきです。 .Pp .Vt uio 構造体の各フィールドは下記のとおりです。 .Bl -tag -width ".Va uio_iovcnt" .It Va uio_iov 処理すべき入出力ベクタの配列です。 散在的な入出力の場合には、一つ以上のベクタとなるでしょう。 .It Va uio_iovcnt 存在している入出力ベクタの数を示します。 .It Va uio_offset デバイスのオフセットです。 .It Va uio_resid 処理すべきバイト数です。 .It Va uio_segflg 以下のフラグの中の一つです。 .Bl -tag -width ".Dv UIO_USERSPACE" .It Va UIO_USERSPACE 入出力ベクタはプロセスのアドレス空間を指しています。 .It Va UIO_SYSSPACE 入出力ベクタはカーネルのアドレス空間を指しています。 .It Va UIO_NOCOPY オブジェクト中に既にデータがあり、コピーしません。 .El .It Va uio_rw 要求された転送の方向を示し、 .Dv UIO_READ または .Dv UIO_WRITE です。 .It Va uio_procp スレッドに関連付けられた .Vt "struct thread" 構造体へのポインタです。 .Dv uio_segflg がプロセスのアドレス空間との転送をすべきであると示している場合に 使用されます。 .El .Sh 使用例 考え方として、ドライバはデータのためのプライベートなバッファの保守を行ない、 このバッファの最大サイズのデータのかたまりの要求を処理します。 下記のバッファの取り扱いはとても簡略化されていて 恐らく動きません(バッファのポインタは部分的な読み込みの場合進みません)し、 .Nm の取り扱いを実際にやって見せているだけだ、ということに注意してください。 .Bd -literal /* MIN() の定義はこの中にあります */ #include #define BUFSIZE 512 static char buffer[BUFSIZE]; static int data_available; /* 読み込めるデータ量 */ static int fooread(dev_t dev, struct uio *uio, int flag) { int rv, amnt; while (uio->uio_resid > 0) { if (data_available > 0) { amnt = MIN(uio->uio_resid, data_available); - if ((rv = uiomove((caddr_t)buffer, amnt, uio)) + if ((rv = uiomove(buffer, amnt, uio)) != 0) goto error; data_available -= amnt; } else { tsleep(...); /* より良い時期まで待つ */ } } return 0; error: /* エラーのクリーンアップをここで行なう */ return rv; } .Ed .Sh 戻り値 .Fn uiomove は プロセスのアドレス空間との転送の場合に、 .Xr copyin 9 または .Xr copyout 9 によって引き起こされた .Er EFAULT を返すことがあります。 .Sh 関連項目 .Xr read 2 , .Xr readv 2 , .Xr write 2 , .Xr writev 2 , .Xr copyin 9 , .Xr copyout 9 , .Xr sleep 9 .Sh 歴史 .Nm の仕組みはある早期のバージョンの .Ux で登場しました。 .Sh 作者 このマニュアルページは .An J\(:org Wunsch が書きました。 diff --git a/ja_JP.eucJP/man/man9/vnode.9 b/ja_JP.eucJP/man/man9/vnode.9 index b6d1fea78a..9e8187b2b1 100644 --- a/ja_JP.eucJP/man/man9/vnode.9 +++ b/ja_JP.eucJP/man/man9/vnode.9 @@ -1,271 +1,271 @@ .\" -*- nroff -*- .\" .\" Copyright (c) 1996 Doug Rabson .\" .\" All rights reserved. .\" .\" This program is free software. .\" .\" 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 DEVELOPERS ``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 DEVELOPERS 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 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" %FreeBSD: src/share/man/man9/vnode.9,v 1.23 2003/01/19 15:44:32 sheldonh Exp % +.\" %FreeBSD: src/share/man/man9/vnode.9,v 1.24 2003/03/06 23:55:51 ceri Exp % .\" .\" $FreeBSD$ .Dd June 30, 1999 .Os .Dt VNODE 9 .Sh 名称 .Nm vnode .Nd ファイルまたはディレクトリの内部表現 .Sh 書式 .In sys/param.h .In sys/vnode.h .Pp .Bd -literal /* * vnode の型です。VNON は型が無いことを意味します。 */ enum vtype { VNON, VREG, VDIR, VBLK, VCHR, VLNK, VSOCK, VFIFO, VBAD }; /* * 個々の下位ファイルシステムはその私的な領域を割り当て、それを * v_data から吊るします。ヌルでないならば、この領域は getnewvnode() で * 解放されます。 */ TAILQ_HEAD(buflists, buf); typedef int vop_t((void *)); struct namecache; /* * これらの項目の読込みまたは書込みは適切なロックの保持を要求します。 * v_freelist はグローバル vnode_free_list 単純ロックでロックされます。 * v_mntvnodes はグローバル mntvnodes 単純ロックでロックされます。 * v_flag, v_usecount, v_holdcount および v_writecount は vinterlock * 単純ロックでロックされます。 * v_pollinfo はその中に含まれているロックでロックされます。 */ struct vnode { u_long v_flag; /* vnode フラグ (以下参照) */ int v_usecount; /* ユーザの参照カウント */ int v_writecount; /* 書込み者の参照カウント */ int v_holdcnt; /* ページ & バッファの参照 */ u_long v_id; /* ケーパビリティ識別子 */ struct mount *v_mount; /* 今いる VFS へのポインタ */ vop_t **v_op; /* vnode 操作ベクタ */ TAILQ_ENTRY(vnode) v_freelist; /* vnode フリーリスト */ LIST_ENTRY(vnode) v_mntvnodes; /* マウントポイントの vnode */ struct buflists v_cleanblkhd; /* 綺麗なブロックリスト先頭 */ struct buflists v_dirtyblkhd; /* 汚れたブロックリスト先頭 */ LIST_ENTRY(vnode) v_synclist; /* 汚れたバッファ付き vnode */ long v_numoutput; /* 書き込み中の数 */ enum vtype v_type; /* vnode の型 */ union { struct mount *vu_mountedhere;/* マウントされた VFS へのポインタ (VDIR) */ struct socket *vu_socket; /* UNIX IPC (VSOCK) */ struct { struct specinfo *vu_specinfo; /* デバイス (VCHR, VBLK) */ SLIST_ENTRY(vnode) vu_specnext; } vu_spec; struct fifoinfo *vu_fifoinfo; /* FIFO (VFIFO) */ } v_un; struct nqlease *v_lease; /* 貸出しのソフト参照 */ daddr_t v_lastw; /* 最後の書込み (クラスタ) */ daddr_t v_cstart; /* クラスタの開始ブロック */ daddr_t v_lasta; /* 最後の割当て */ int v_clen; /* 現在のクラスタ長 */ struct vm_object *v_object; /* VM オブジェクトの保存場所 */ struct simplelock v_interlock; /* 使用カウントとフラグのロック */ struct lock *v_vnlock; /* 非ロックファイルシステム用 */ const char *v_tag; /* 下位データの型 */ void *v_data; /* ファイルシステムの私的データ */ LIST_HEAD(, namecache) v_cache_src; /* 我々からのキャッシュエントリ */ TAILQ_HEAD(, namecache) v_cache_dst; /* 我々へのキャッシュエントリ */ struct vnode *v_dd; /* .. の vnode */ u_long v_ddid; /* .. のケーパビリティ識別子 */ struct { struct simplelock vpi_lock; /* 以下を保護するロック */ struct selinfo vpi_selinfo; /* ポーリング側の識別 */ short vpi_events; /* 何を探しているのか */ short vpi_revents; /* 何が起こったのか */ } v_pollinfo; }; #define v_mountedhere v_un.vu_mountedhere #define v_socket v_un.vu_socket #define v_rdev v_un.vu_spec.vu_specinfo #define v_specnext v_un.vu_spec.vu_specnext #define v_fifoinfo v_un.vu_fifoinfo /* * vnode フラグです。 */ #define VROOT 0x00001 /* ファイルシステムのルート */ #define VTEXT 0x00002 /* vnode は純粋なテキストプロトタイプ */ #define VSYSTEM 0x00004 /* vnode はカーネルが使用中 */ #define VISTTY 0x00008 /* vnode は tty を表現 */ #define VXLOCK 0x00100 /* vnode は下位の型の変更のためロック中 */ #define VXWANT 0x00200 /* プロセスが vnode を待っています */ #define VBWAIT 0x00400 /* 出力の完了を待っています */ #define VOBJBUF 0x02000 /* VM オブジェクトにバッファを割当て */ #define VAGE 0x08000 /* フリーリストの先頭に vnode を挿入 */ #define VOLOCK 0x10000 /* オブジェクトを待つために vnode がロック */ #define VOWANT 0x20000 /* プロセスが VOLOCK を待っています */ #define VDOOMED 0x40000 /* この vnode は再利用中 */ #define VFREE 0x80000 /* この vnode はフリーリスト上 */ #define VTBFREE 0x100000 /* この vnode はフリーリスト行き */ #define VONWORKLST 0x200000 /* syncer 作業リスト上 */ #define VMOUNT 0x400000 /* マウント処理中 */ .Ed .Sh 解説 vnode は .Ux でのファイル活動の中心です。 個々の活動中のファイル、 個々の現在のディレクトリ、個々のマウントされたファイル、 テキストファイル、およびルートのために割当てられた一意的な vnode があります。 .Pp 個々の vnode は 3 つの参照カウント、 .Dv v_usecount , .Dv v_holdcnt および .Dv v_writecount を持っています。 最初のものはカーネル内でこの vnode を使用しているクライアントの数です。 このカウントは .Xr vref 9 , .Xr vrele 9 および .Xr vput 9 によって管理されます。 2 番目のものはカーネル内でこの vnode の再利用を拒否しているクライアントの 数です。 このカウントは .Xr vhold 9 および .Xr vdrop 9 によって管理されます。 vnode の .Dv v_usecount および .Dv v_holdcnt の両方が 0 に達すると、それからその vnode はフリーリスト上に置かれ、 ことによっては別のファイルシステムで、 別のファイルのために再利用されるかもしれません。 フリーリストへのおよびフリーリストからの移行は、 .Xr getnewvnode 9 , .Xr vfree 9 および .Xr vbusy 9 によって取り扱われます。 3 番目のものはファイルに書込み中のクライアントの数のカウントです。 これは .Xr open 2 および .Xr close 2 システムコールによって管理されます。 .Pp vnode を返すあらゆる呼び出し (例えば .Xr VFS_GET 9 , .Xr VOP_LOOKUP 9 など) は vnode の .Dv v_usecount を 1 ずつ増やします。 呼び出し側が vnode の利用を完了したときには、この参照は .Xr vrele 9 (または vnode がロックされていれば .Xr vput 9 ) の呼び出しによって解放されるべきです。 .Pp その他の共通に使用される vnode 構造体のメンバは、 名前キャッシュでの一貫性を管理するために使用される .Dv v_id と、その vnode を所有しているファイルシステムを指す .Dv v_mount と、その vnode が表現するオブジェクトの型を含む .Dv v_type と、その vnode のファイルシステム特有のデータを保存するために ファイルシステムによって使用される .Dv v_data があります。 .Dv v_op フィールドは vnode の機能を実装するファイルシステム内の関数を呼び出すための .Dv VOP_* マクロによって使用されます。 .Sh VNODE の型 .Bl -tag -width VSOCK .It Dv VNON 型なしです。 .It Dv VREG 通常ファイルです。 VM オブジェクトの支持が有るかもしれませんし無いかもしれません。 必ず支持オブジェクトを取得したい場合には、 .Xr vfs_object_create 9 を呼び出します。 .It Dv VDIR ディレクトリです。 .It Dv VBLK ブロック型デバイスです。 VM オブジェクトの支持が有るかもしれませんし無いかもしれません。 必ず支持オブジェクトを取得したい場合には、 .Xr vfs_object_create 9 を呼び出します。 .It Dv VCHR 文字型デバイスです。 .It Dv VLNK シンボリックリンクです。 .It Dv VSOCK ソケットです。 通知ロックは動作しないでしょう。 .It Dv VFIFO FIFO (名前付きパイプ) です。 通知ロックは動作しないでしょう。 .It Dv VBAD 古い形式のバッドセクタマップです。 .El .Sh 実装に関する注 VFIFO は .Pa /sys/kern/sys_pipe.c の "struct fileops" を使用します。 VSOCK は .Pa /sys/kern/sys_socket.c の "struct fileops" を使用します。 その他の全ては .Pa /sys/kern/vfs_vnops.c の "struct fileops" を使用します。 .Pp VFIFO/VSOCK のコードになぜか "struct fileops" が使用されている理由は、 カーネルへの VFS コードの不完全な統合の文化遺産です。 .Pp .Xr vnode 9 インタロックを保持している時の .Fn malloc または .Fn free -への全ての呼出しは、VM オブジェクトと vnode の相互獲得のために、 +への全ての呼出しは、VM オブジェクトと vnode のもつれ合いのために、 LOR (ロック順序の逆転) を引き起こします。 .Sh 関連項目 .Xr malloc 9 , .Xr VFS 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。