diff --git a/ja_JP.eucJP/man/man9/DEVICE_PROBE.9 b/ja_JP.eucJP/man/man9/DEVICE_PROBE.9 index 9217f3e21c..df592902a7 100644 --- a/ja_JP.eucJP/man/man9/DEVICE_PROBE.9 +++ b/ja_JP.eucJP/man/man9/DEVICE_PROBE.9 @@ -1,93 +1,92 @@ .\" -*- 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_PROBE.9,v 1.13 2002/03/18 10:43:49 ru Exp % +.\" %FreeBSD: src/share/man/man9/DEVICE_PROBE.9,v 1.15 2002/12/24 16:52:31 ru Exp % .\" .\" $FreeBSD$ .Dd June 16, 1998 .Os .Dt DEVICE_PROBE 9 .Os .Sh 名称 .Nm DEVICE_PROBE .Nd デバイスの存在のプローブ .Sh 書式 .In sys/param.h .In sys/bus.h .Ft int .Fn DEVICE_PROBE "device_t dev" .Sh 解説 このデバイスメソッドはデバイスがあるかどうかを知るためにプローブするべきです。 デバイスが存在すれば 0 を、デバイスが見つからなければ .Er ENXIO を返すべきです。 プローブの間にその他のエラー(メモリ割当の失敗など)が起こった場合は、 適切なエラーコードが返されるべきです。 1 つのデバイスに 1 つ以上のドライバが当てはまるような場合のために、 優先順位を返すことができます。 この場合、成功の値は 0 以下の値で、 最も大きな値が最も適切であることを意味します。 失敗の値は正の値で表現され、通常の .Ux エラーコードが目的に応じて使用されるべきです。 .Pp ドライバが 0 より小さい成功値を返す場合、 ドライバはそのデバイスにアタッチされるのが 同じドライバであると想定してはいけません。 特に、softc 構造体に格納されたすべての値が アタッチメソッドで利用可能であると想定してはいけませんし、 また、アタッチメソッドが呼ばれた場合、 プローブの間に割り当てられたあらゆるリソースは解放して 再割り当てしなければなりません。 成功値 0 を返す場合には、 ドライバはそのドライバがアタッチされると想定することができます。 .Pp バスを実装するデバイスは、 バスに接続されたデバイスの存在をプローブし それらを子デバイスとして追加するために、 このメソッドを使用するべきです。 このメソッドが .Xr bus_generic_attach 9 の使用と結合していれば、 子デバイスは自動的にプローブされ、アタッチされるでしょう。 .Sh 戻り値 0 以下の値は成功を表し、0 より大きな値はエラー(errno)を表します。 0 以下の値の時、0 は最高の優先順位を表し、それ以上のプローブは行ないません。 0 未満の値は、低い値程、低い優先順位を表します。 たとえば、-100 は -50 よりも低い優先順位を表します。 .Sh 関連項目 .Xr device 9 , .Xr DEVICE_ATTACH 9 , .Xr DEVICE_DETACH 9 , .Xr DEVICE_IDENTIFY 9 , -.Xr DEVICE_PROBE 9 , .Xr DEVICE_SHUTDOWN 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/VOP_ATTRIB.9 b/ja_JP.eucJP/man/man9/VOP_ATTRIB.9 index 25611fcbad..5d5d6050dd 100644 --- a/ja_JP.eucJP/man/man9/VOP_ATTRIB.9 +++ b/ja_JP.eucJP/man/man9/VOP_ATTRIB.9 @@ -1,169 +1,169 @@ .\" -*- 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/VOP_ATTRIB.9,v 1.22 2002/12/12 17:25:58 ru Exp % +.\" %FreeBSD: src/share/man/man9/VOP_ATTRIB.9,v 1.23 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd July 24, 1996 .Os .Dt VOP_ATTRIB 9 .Sh 名称 .Nm VOP_GETATTR , .Nm VOP_SETATTR .Nd ファイルまたはディレクトリの属性の取得または設定 .Sh 書式 .In sys/param.h .In sys/vnode.h .Ft int .Fn VOP_GETATTR "struct vnode *vp" "struct vattr *vap" "struct ucred *cred" "struct thread *td" .Ft int .Fn VOP_SETATTR "struct vnode *vp" "struct vattr *vap" "struct ucred *cred" "struct thread *td" .Sh 解説 これらのエントリポイントは、 ファイルまたはディレクトリの様々な属性を操作します。 操作対象には、ファイルパーミッション、所有者、グループ、 大きさ、アクセス時刻、更新時刻を含みます。 .Pp 引数は以下の通りです。 .Bl -tag -width cred .It Fa vp ファイルの vnode。 .It Fa vap ファイルの属性。 .It Fa cred 呼び出したプロセスのユーザ証明。 .It Fa td スレッド。 .El .Pp -.Xr VOP_SETATTR 9 +.Fn VOP_SETATTR によって更新されようとしていない属性は .Dv VNOVAL が設定されているべきです。 .Fn VATTR_NULL は全ての値をクリアするために使用することができ、一般的には .Fa *vap の値の明示の前にその内容をリセットするために使用されるべきです。 .Sh ロック -.Xr VOP_GETATTR 9 +.Fn VOP_GETATTR は、入る時に vnode がロックされていて、戻り時まで vnode がロックされたままで あることを期待します。 そのロックの型は共有または排他が可能です。 .Pp -.Xr VOP_SETATTR 9 +.Fn VOP_SETATTR は、入る時に vnode がロックされていて、戻り時まで vnode がロックされたままで あることを期待します。 そのロックの型は排他でなければなりません。 .Sh 戻り値 -.Xr VOP_GETATTR 9 +.Fn VOP_GETATTR は .Fa *vap を介して属性データを取り出すことができた場合には 0 を返し、 そうでない場合には適切なエラーが返されます。 -.Xr VOP_SETATTR 9 +.Fn VOP_SETATTR は属性がうまく変更された場合には 0 を返し、 そうでない場合には適切なエラーが返されます。 .Sh 疑似コード .Bd -literal int vop_getattr(struct vnode *vp, struct vattr *vap, struct ucred *cred, struct thread *td) { /* * *vap をファイルシステムからの情報で埋めます。 */ ...; return 0; } int vop_setattr(struct vnode *vp, struct vattr *vap, struct ucred *cred, struct thread *td) { /* * 設定できない属性をチェックします。 */ if ((vap->va_type != VNON) || (vap->va_nlink != VNOVAL) || (vap->va_fsid != VNOVAL) || (vap->va_fileid != VNOVAL) || (vap->va_blocksize != VNOVAL) || (vap->va_rdev != VNOVAL) || ((int)vap->va_bytes != VNOVAL) || (vap->va_gen != VNOVAL)) { return (EINVAL); } if (vap->va_flags != VNOVAL) { /* * ファイルの変更不能と追加フラグを設定します。 */ } if (vap->va_uid != (uid_t)VNOVAL || vap->va_gid != (gid_t)VNOVAL) { /* * ファイルの所有者および/またはグループを変更します。 */ } if (vap->va_size != VNOVAL) { /* * ファイルを指定された大きさに切り詰めます。 */ } if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL) { /* * ファイルのアクセスおよび/または更新時刻を変更します。 */ } if (vap->va_mode != (mode_t)VNOVAL) { /* * ファイルのパーミッションを変更します。 */ } return 0; } .Ed .Sh エラー .Bl -tag -width Er .It Bq Er EPERM ファイルは変更不可能です。 .It Bq Er EACCES 呼び出し側がそのファイルまたはディレクトリの属性を修正するパーミッションを 持っていません。 .It Bq Er EROFS ファイルシステムが読み込み専用です。 .El .Sh 関連項目 .Xr VFS 9 , .Xr vnode 9 , .Xr VOP_ACCESS 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/VOP_INACTIVE.9 b/ja_JP.eucJP/man/man9/VOP_INACTIVE.9 index 32f62b2b9b..06bc6759c7 100644 --- a/ja_JP.eucJP/man/man9/VOP_INACTIVE.9 +++ b/ja_JP.eucJP/man/man9/VOP_INACTIVE.9 @@ -1,106 +1,106 @@ .\" -*- 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/VOP_INACTIVE.9,v 1.10 2002/12/12 17:25:58 ru Exp % +.\" %FreeBSD: src/share/man/man9/VOP_INACTIVE.9,v 1.11 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd July 24, 1996 .Os .Dt VOP_INACTIVE 9 .Sh 名称 .Nm VOP_INACTIVE , .Nm VOP_RECLAIM .Nd vnode のためのファイルシステム資源の回収 .Sh 書式 .In sys/param.h .In sys/vnode.h .Ft int .Fn VOP_INACTIVE "struct vnode *vp" "struct thread *td" .Ft int .Fn VOP_RECLAIM "struct vnode *vp" "struct thread *td" .Sh 解説 引数は以下の通りです。 .Bl -tag -width 2n .It Ar vp 回収されている vnode。 .El .Pp -.Xr VOP_INACTIVE 9 +.Fn VOP_INACTIVE は、カーネルがもはやその vnode を使用しなくなった時に呼び出されます。 これは、参照カウントが 0 になった時、 またはオープンされているファイルがあるファイルシステムが 強制的にアンマウントされた時に起こります。 「オープンされているが削除された」ファイルのための領域を回収するために、 使用可能です。 -.Xr VOP_RECLAIM 9 +.Fn VOP_RECLAIM は、異なるファイルシステムのために vnode が再利用される時に呼び出されます。 vnode に関連しているあらゆるファイルシステム固有の資源は、解放されるべきです。 .Sh ロック VOP_INACTIVE では、入る時に vp がロックされます。 VOP_INACTIVE コードは、戻る前に vp をアンロックしなければなりません。 .Pp VOP_RECLAIM では、入る時に vp はロックされず、 戻り時もロックされないままでいるべきです。 .Sh 疑似コード .Bd -literal int vop_inactive(struct vnode *vp, struct thread *td) { if (link count of vp == 0) { /* * vp のためのファイルシステム内の領域を回収します。 */ ...; } VOP_UNLOCK(vp, 0, td); return 0; } int vop_reclaim(struct vnode *vp) { /* * 名前キャッシュを一掃します。 */ cache_purge(vp); /* * ファイルシステムに関連したデータを解放します。 */ ...; return 0; } .Ed .Sh 関連項目 .Xr vnode 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/VOP_LINK.9 b/ja_JP.eucJP/man/man9/VOP_LINK.9 index 3e43b767b1..bb5ac45cee 100644 --- a/ja_JP.eucJP/man/man9/VOP_LINK.9 +++ b/ja_JP.eucJP/man/man9/VOP_LINK.9 @@ -1,117 +1,117 @@ .\" -*- 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/VOP_LINK.9,v 1.18 2002/11/29 11:39:20 ru Exp % +.\" %FreeBSD: src/share/man/man9/VOP_LINK.9,v 1.19 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd July 24, 1996 .Os .Dt VOP_LINK 9 .Sh 名称 .Nm VOP_LINK .Nd ファイルの新しい名前の作成 .Sh 書式 .In sys/param.h .In sys/vnode.h .Ft int .Fn VOP_LINK "struct vnode *dvp" "struct vnode *vp" "struct componentname *cnp" .Sh 解説 これは、既存のファイルに対し、 指定したディレクトリ中の新しい名前をリンクします。 .Pp 引数は以下の通りです。 .Bl -tag -width 8n .It Ar dvp ディレクトリの vnode。 .It Ar vp リンクされるファイルの vnode。 .It Ar cnp ファイルについてのパス名情報。 .El .Pp パス名情報は戻り時に開放されるべきでは .Em ありません 。 なぜならば、それは呼び出し側によって行なわれるからです。 ディレクトリとファイルの vnode は戻り時に解放されるべきでは .Em ありません 。 .Sh ロック -.Xr VOP_LINK 9 +.Fn VOP_LINK はディレクトリおよびファイルの vnode は入る時にロックされ、戻る時まで ロックされ続けていることを期待します。 .Sh 戻り値 ファイルが成功裏にリンクされた場合には 0 が返され、 そうでない場合にはエラーが返されます。 .Sh 疑似コード .Bd -literal int vop_link(struct vnode *dvp, struct vnode *vp, struct componentname *cnp) { int error = 0; if (vp->v_mount != dvp->v_mount) return (EXDEV); if (vp would have too many links) return (EMLINK); if (vp is immutable) return (EPERM); /* * vp のリンクカウントをインクリメントし、ディスクに書き戻します。 */ ...; if (!error) { /* * ディレクトリの新しい名前を追加します。 */ ...; } return error; } .Ed .Sh エラー .Bl -tag -width Er .It Bq Er EMLINK ファイルのリンクの数が多すぎます。 .It Bq Er EPERM ファィルが変更不可能です。 .It Bq Er EXDEV 異なるファイルシステム間ではハードリンクは利用できません。 .El .Sh 関連項目 .Xr vnode 9 , .Xr vn_lock 9 .Sh 作者 このマニュアルページは .An Doug Rabson が初めて書きました。 diff --git a/ja_JP.eucJP/man/man9/VOP_OPENCLOSE.9 b/ja_JP.eucJP/man/man9/VOP_OPENCLOSE.9 index 0b488d9436..9593cd0ed3 100644 --- a/ja_JP.eucJP/man/man9/VOP_OPENCLOSE.9 +++ b/ja_JP.eucJP/man/man9/VOP_OPENCLOSE.9 @@ -1,102 +1,102 @@ .\" -*- 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/VOP_OPENCLOSE.9,v 1.10 2002/12/12 17:25:58 ru Exp % +.\" %FreeBSD: src/share/man/man9/VOP_OPENCLOSE.9,v 1.11 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd July 24, 1996 .Os .Dt VOP_OPEN 9 .Sh 名称 .Nm VOP_OPEN , .Nm VOP_CLOSE .Nd ファイルのオープンまたはクローズ .Sh 書式 .In sys/param.h .In sys/vnode.h .Ft int .Fn VOP_OPEN "struct vnode *vp" "int mode" "struct ucred *cred" "struct thread *td" .Ft int .Fn VOP_CLOSE "struct vnode *vp" "int mode" "struct ucred *cred" "struct thread *td" .Sh 解説 -.Xr VOP_OPEN 9 +.Fn VOP_OPEN エントリポイントは、 ファイルがプロセスによってアクセスされる前に呼び出され、 -.Xr VOP_CLOSE 9 +.Fn VOP_CLOSE エントリポイントは、 ファイルに対するプロセスの仕事の完了後に呼び出されます。 .Pp 引数は以下の通りです。 .Bl -tag -width mode .It Ar vp ファイルの vnode。 .It Ar mode 呼び出しプロセスによって要求されたアクセスモード。 .It Ar td ファイルにアクセスしているスレッド。 .El .Pp アクセスモードは、 .Dv FREAD , .Dv FWRITE , .Dv O_NONBLOCK , .Dv O_APPEND を含むフラグの組です。 .Sh ロック -.Xr VOP_OPEN 9 +.Fn VOP_OPEN は、入る時に .Fa vp がロックされていることを期待し、戻り時までロックされたままにします。 .Pp -.Xr VOP_CLOSE 9 +.Fn VOP_CLOSE は、vnode に結びつけられた参照が少なくとも 1 個は存在することを期待し、 vnode がロックされているかどうかは気にしません。 ロックおよび参照状態は、戻る時に変更されずにそのままになります。 .Fa vn_close は、ロックされていない参照された vnode を期待し、 戻る前に参照を手繰ることに注意してください。 .Sh 戻り値 成功時には 0 が返され、そうでない場合にはエラーコードが返されます。 .Sh 疑似コード .Bd -literal int vop_open(struct vnode *vp, int mode, struct ucred *cred, struct thread *td) { /* * ほとんどのファイルシステムは、ここでは大したことはしません。 */ return 0; } .Ed .Sh 関連項目 .Xr vnode 9 , .Xr VOP_LOOKUP 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/device_add_child.9 b/ja_JP.eucJP/man/man9/device_add_child.9 index b1bf1b057b..7c8bc48a15 100644 --- a/ja_JP.eucJP/man/man9/device_add_child.9 +++ b/ja_JP.eucJP/man/man9/device_add_child.9 @@ -1,99 +1,99 @@ .\" -*- 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_add_child.9,v 1.13 2001/10/01 16:09:24 ru Exp % +.\" %FreeBSD: src/share/man/man9/device_add_child.9,v 1.14 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd June 16, 1998 .Dt DEVICE_ADD_CHILD 9 .Os .Sh 名称 .Nm device_add_child , .Nm device_add_child_ordered .Nd 存在しているデバイスの子として新しいデバイスを追加 .Sh 書式 .In sys/param.h .In sys/bus.h .Ft device_t .Fn device_add_child "device_t dev" "const char *name" "int unit" .Ft device_t .Fn device_add_child_ordered "device_t dev" "int order" "const char *name" "int unit" .Sh 解説 .Fa dev の新しい子デバイスを追加します。 .Fa name および .Fa unit 引数はデバイスの名前とユニット番号を指定します。 名前が不明の場合には、呼び出し側は .Dv NULL を渡すべきです。 ユニット番号が不明の場合には、呼び出し側は .Dv -1 を渡すべきで、システムは次の使用可能なユニット番号を選択するでしょう。 .Pp デバイスの名前は、どのドライバがそのデバイスに適切であるかを 決定するために使用されます。 名前が指定されている場合には、その名前のドライバのみがプローブされます。 名前が与えられなかった場合には、 認識しているバスの全てのドライバがプローブされます。 .Pp これは、デバイスインスタンスを独自に識別することができるバス (PCI 等) が、 個々のドライバが個々のデバイスインスタンスに適合しているか チェック可能にします。 供給されたプローブヒントに依存して、 たった 1 つのドライバがデバイスをプローブ可能なバスでは、 ドライバの名前はデバイスの名前として指定されるべきです。 .Pp 通常、ユニット番号はシステムによって時動的に選択されますので、ユニット番号は .Dv -1 が与えられるべきです。 指定のユニット番号が希望された時に (例えば、ハードウェアの一部分を あらかじめ設定されたユニット番号に結びつけるため)、unit は渡されるべきです。 指定されたユニット番号が既に割り当てられていた場合には、新しいユニット番号が 割り当てられ、診断メッセージが表示されます。 .Pp 指定の順序でプローブされなければならないバス (例えば、ISA バス用の幾つかの デバイスは関連の無いドライバのプローブの試みの失敗に敏感で、それゆえ 最初にプローブされなければならない) にアタッチされたデバイスの場合には、 -.Xr device_add_child_ordered 9 +.Fn device_add_child_ordered の .Fa order 引数が半順序を指定するために使用されるべきです。 新しいデバイスは、 既存のより大きい順序を持つすべてのデバイスの前に追加されます。 -.Xr device_add_child 9 +.Fn device_add_child が使用された場合には、順序が 0 であるとして新しい子が追加されます。 .Sh 戻り値 成功時には新しいデバイスが、そうでなければ NULL が返されます。 .Sh 関連項目 .Xr device 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/device_enable.9 b/ja_JP.eucJP/man/man9/device_enable.9 index f523bb3674..2f42012cc1 100644 --- a/ja_JP.eucJP/man/man9/device_enable.9 +++ b/ja_JP.eucJP/man/man9/device_enable.9 @@ -1,65 +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_enable.9,v 1.7 2002/01/09 11:43:47 mpp Exp % +.\" %FreeBSD: src/share/man/man9/device_enable.9,v 1.8 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd June 16, 1998 .Dt DEVICE_ENABLE 9 .Os .Sh 名称 .Nm device_enable , .Nm device_disable , .Nm device_is_enabled .Nd デバイスの有効フラグの操作 .Sh 書式 .In sys/param.h .In sys/bus.h .Ft void .Fn device_enable "device_t dev" .Ft void .Fn device_disable "device_t dev" .Ft int .Fn device_is_enabled "device_t dev" .Sh 解説 個々のデバイスは、結びつけられた有効フラグを持っています。 デバイスは生成時にはデフォルトで有効になっていますが、(例えば、破壊的または 時間を消費するプローブの試みを防ぐために) 無効にできます。 デバイスを無効にするには -.Xr device_disable 9 +.Fn device_disable を呼び出し、再度有効にするには -.Xr device_enable 9 +.Fn device_enable を呼び出し、デバイスが有効かどうか確認するには -.Xr device_is_enabled 9 +.Fn device_is_enabled を呼び出します。 .Sh 関連項目 .Xr device 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/device_get_state.9 b/ja_JP.eucJP/man/man9/device_get_state.9 index 3e7210d042..2dd7e31a34 100644 --- a/ja_JP.eucJP/man/man9/device_get_state.9 +++ b/ja_JP.eucJP/man/man9/device_get_state.9 @@ -1,95 +1,95 @@ .\" -*- 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_state.9,v 1.8 2001/10/01 16:09:24 ru Exp % +.\" %FreeBSD: src/share/man/man9/device_get_state.9,v 1.9 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd June 16, 1998 .Dt DEVICE_GET_STATE 9 .Os .Sh 名称 .Nm device_get_state , .Nm device_busy , .Nm device_unbusy , .Nm device_is_alive .Nd デバイス状態の操作 .Sh 書式 .In sys/param.h .In sys/bus.h .Ft device_state_t .Fn device_get_state "device_t dev" .Ft void .Fn device_busy "device_t dev" .Ft void .Fn device_unbusy "device_t dev" .Ft int .Fn device_is_alive "device_t dev" .Sh 解説 デバイスの現在の状態は、 .Dv DS_NOTPRESENT , .Dv DS_ALIVE , .Dv DS_ATTACHED , .Dv DS_BUSY ( .Xr device 9 で説明されています) を返す -.Xr device_get_state 9 +.Fn device_get_state の呼び出しによってアクセスされます。 デバイスがうまくプローブされたことを確認するには、単純に状態が .Dv DS_ALIVE 以上であるかどうかを返す -.Xr device_is_alive 9 +.Fn device_is_alive を呼び出します。 .Pp 個々のデバイスは、 -.Xr device_busy 9 +.Fn device_busy が呼び出された時にインクリメントされ、 -.Xr device_unbusy 9 +.Fn device_unbusy が呼び出された時にデクリメントされるビジーカウントを持っています。 どちらのルーチンもデバイスの状態が .Dv DS_ATTACHED より小さい場合にはエラーを返します。 .Pp デバイスが .Dv DS_ATTACHED 状態で -.Xr device_busy 9 +.Fn device_busy が呼び出された時には、デバイスは .Dv DS_BUSY 状態に遷移します。 -.Xr device_unbusy 9 +.Fn device_unbusy が呼び出されでデクリメントされた後にデバイスのビジーカウントが 0 ならば、 デバイスは .Dv DS_ATTACHED 状態に遷移します。 .Sh 関連項目 .Xr device 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/device_quiet.9 b/ja_JP.eucJP/man/man9/device_quiet.9 index ae7ab86725..1963513dfc 100644 --- a/ja_JP.eucJP/man/man9/device_quiet.9 +++ b/ja_JP.eucJP/man/man9/device_quiet.9 @@ -1,68 +1,68 @@ .\" -*- 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_quiet.9,v 1.8 2002/01/09 11:43:47 mpp Exp % +.\" %FreeBSD: src/share/man/man9/device_quiet.9,v 1.9 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd June 21, 1999 .Dt DEVICE_QUIET 9 .Os .Sh 名称 .Nm device_quiet , .Nm device_verbose , .Nm device_is_quiet .Nd デバイスの沈黙フラグの操作 .Sh 書式 .In sys/param.h .In sys/bus.h .Ft void .Fn device_quiet "device_t dev" .Ft void .Fn device_verbose "device_t dev" .Ft int .Fn device_is_quiet "device_t dev" .Sh 解説 個々のデバイスは結びつけられた沈黙フラグを持っています。 デバイスは生成時のデフォルトでは冗長ですが、プローブ中に デバイス識別文字列の出力を妨げるために、沈黙させられます。 デバイスを沈黙させるには -.Xr device_quiet 9 +.Fn device_quiet を呼び出し、プローブメッセージを再度有効 (例えば .Xr device_detach 9 の後に、メッセージが再び現れるようにします) にするには -.Xr device_verbose 9 +.Fn device_verbose を呼び出します。 デバイスが沈黙状態かどうかを確認するためには -.Xr device_is_quiet 9 +.Fn device_is_quiet を呼び出します。 .Sh 関連項目 .Xr device 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/device_set_desc.9 b/ja_JP.eucJP/man/man9/device_set_desc.9 index 92a83a4a9a..026fea0191 100644 --- a/ja_JP.eucJP/man/man9/device_set_desc.9 +++ b/ja_JP.eucJP/man/man9/device_set_desc.9 @@ -1,65 +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_set_desc.9,v 1.8 2001/10/01 16:09:24 ru Exp % +.\" %FreeBSD: src/share/man/man9/device_set_desc.9,v 1.9 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd June 16, 1998 .Dt DEVICE_SET_DESC 9 .Os .Sh 名称 .Nm device_set_desc , .Nm device_set_desc_copy , .Nm device_get_desc .Nd デバイスの記述にアクセス .Sh 書式 .In sys/param.h .In sys/bus.h .Ft void .Fn device_set_desc "device_t dev" "const char *desc" .Ft void .Fn device_set_desc_copy "device_t dev" "const char *desc" .Ft const char * .Fn device_get_desc "device_t dev" .Sh 解説 デバイスの冗長な記述を操作します。 (存在するならば) この記述は、 自動コンフィギュレーションの間のアタッチ時に、 メッセージの一部として表示されます。 変種の -.Xr device_set_desc_copy 9 +.Fn device_set_desc_copy は、渡される文字列が上書きされるかも知れない一時的なバッファである場合に、 使用されます。 この場合にはシステムはその文字列をコピーしますが、 そうでない場合には渡されたポインタが直接使用されます。 .Sh 関連項目 .Xr device 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/device_set_flags.9 b/ja_JP.eucJP/man/man9/device_set_flags.9 index 6b9c2eb879..f6edce9d68 100644 --- a/ja_JP.eucJP/man/man9/device_set_flags.9 +++ b/ja_JP.eucJP/man/man9/device_set_flags.9 @@ -1,59 +1,59 @@ .\" -*- nroff -*- .\" .\" Copyright (c) 1999 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_set_flags.9,v 1.6 2001/10/01 16:09:24 ru Exp % +.\" %FreeBSD: src/share/man/man9/device_set_flags.9,v 1.7 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd September 6, 1999 .Dt DEVICE_GET_FLAGS 9 .Os .Sh 名称 .Nm device_set_flags , .Nm device_get_flags .Nd ドライバフラグの操作 .Sh 書式 .In sys/param.h .In sys/bus.h .Ft void .Fn device_set_flags "device_t dev" "u_int32_t flags" .Ft u_int32_t .Fn device_get_flags "device_t dev" .Sh 解説 個々のデバイスは、デバイスの振舞いを制御するために使用される ドライバ依存のフラグの組を、しばしばサポートしています。 これらのフラグは -.Xr device_get_flags 9 +.Fn device_get_flags の呼び出しによって読み込まれ、 -.Xr device_set_flags 9 +.Fn device_set_flags の呼び出しによって書き込まれます。 .Sh 関連項目 .Xr device 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/kernacc.9 b/ja_JP.eucJP/man/man9/kernacc.9 index 5def4c91b5..60d17a3a16 100644 --- a/ja_JP.eucJP/man/man9/kernacc.9 +++ b/ja_JP.eucJP/man/man9/kernacc.9 @@ -1,91 +1,91 @@ .\" %NetBSD: access.9,v 1.1 1996/06/16 10:38:35 pk Exp % .\" .\" 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. .\" -.\" %FreeBSD: src/share/man/man9/kernacc.9,v 1.12 2001/12/26 23:14:04 davidc Exp % +.\" %FreeBSD: src/share/man/man9/kernacc.9,v 1.13 2003/01/21 11:34:57 alfred Exp % .\" .\" $FreeBSD$ .Dd June 16, 1996 .Dt KERNACC 9 .Os .Sh 名称 .Nm kernacc , .Nm useracc .Nd メモリ領域がアクセス可能か否かの調査 .Sh 書式 .In sys/param.h .In sys/proc.h .In vm/vm.h .In vm/vm_extern.h .Ft int -.Fn kernacc "caddr_t addr" "int len" "int rw" +.Fn kernacc "void *addr" "int len" "int rw" .Ft int -.Fn useracc "caddr_t addr" "int len" "int rw" +.Fn useracc "void *addr" "int len" "int rw" .Sh 解説 .Fn kernacc および .Fn useracc 関数は、 .Fa addr および .Fa len によって与えられる仮想アドレス範囲で、 .Fa rw で指定された操作のタイプが許可されるかどうかを調査します。 .Fa rw の指定可能な値は、 .Dv VM_PROT_READ , .Dv VM_PROT_WRITE および .Dv VM_PROT_EXECUTE の論理合成値です。 .Fn kernacc はカーネルアドレス空間の中のアドレスを調べ、一方 .Fn useracc は .Fa addr をユーザ空間のアドレス表現とみなします。 この操作に使用されるプロセスコンテキストは大域変数 .Va curproc から得られます。 .Sh 戻り値 どちらの関数も、 .Fa rw によって指定されるタイプのアクセスが許可されている場合には、 ブール値 true を返します。 そうでない場合には、ブール値 false が返されます。 .Sh バグ .Fn useracc への引数として、プロセスへのポインタが渡されるべきです。 diff --git a/ja_JP.eucJP/man/man9/malloc.9 b/ja_JP.eucJP/man/man9/malloc.9 index a964bd5b60..d806c4c16f 100644 --- a/ja_JP.eucJP/man/man9/malloc.9 +++ b/ja_JP.eucJP/man/man9/malloc.9 @@ -1,274 +1,280 @@ .\" 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.23 2002/03/18 10:52:09 ru Exp % -,\" $FreeBSD$ +.\" %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_WAITOK -が 0 に定義されていることに注意してください。 -これはブロッキング操作がデフォルトだということです。 割り込みコンテキストでの動作時には .Dv M_NOWAIT -が必要であることにも注意してください。 -.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 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/mi_switch.9 b/ja_JP.eucJP/man/man9/mi_switch.9 index 02b2a5da42..dbc4c2d5ea 100644 --- a/ja_JP.eucJP/man/man9/mi_switch.9 +++ b/ja_JP.eucJP/man/man9/mi_switch.9 @@ -1,160 +1,160 @@ .\" $NetBSD: ctxsw.9,v 1.2 1996/12/02 00:11:31 tls Exp $ .\" .\" 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. .\" -.\" %FreeBSD: src/share/man/man9/mi_switch.9,v 1.16 2002/08/13 14:51:17 ru Exp % +.\" %FreeBSD: src/share/man/man9/mi_switch.9,v 1.17 2002/12/27 12:15:34 schweikh Exp % .\" .\" $FreeBSD$ .Dd November 24, 1996 .Dt MI_SWITCH 9 .Os .Sh 名称 .Nm mi_switch , .Nm cpu_switch , .Nm cpu_throw .Nd 別のスレッドコンテキストへのスイッチ .Sh 書式 .In sys/param.h .In sys/proc.h .Ft void .Fn mi_switch "void" .Ft void .Fn cpu_switch "void" .Ft void .Fn cpu_throw "void" .Sh 解説 .Fn mi_switch 関数はマシン非依存なスレッドコンテキストスイッチの前処理を実装しています。 横取り不可能なカーネルモード実行の方針の結果として、カーネル内の数少ない 区別された場所からのみ呼び出されます。 いくつかの主な .Nm の使用は以下に挙げられます。 .Bl -enum -offset indent .It .Xr sleep 9 , .Xr tsleep 9 および .Xr msleep の中から、あるリソースが利用可能になるのを待つために 現在のスレッドが自発的に CPU を放棄するとき。 .It トラップ (例えば、システムコール、デバイス割り込み) の取り扱いの後で、 カーネルがユーザモード実行のために戻る準備のとき。 通常この場合は、現在のプロセスのシグナル配置の中の変化の検出の後で マシン依存のトラップハンドリングコードによって取り扱われるか、 より高い優先度のスレッドが実行可能になったかもしれないときです。 後者のイベントはマシン定義の .Fn need_resched の呼び出しによるマシン非依存のスケジューリングルーチンによって伝達されます。 .It シグナルハンドラコード .Xr ( issignal 9 を参照) の中で、プロセスを停止させるシグナルが届けられた場合。 .It スレッドが .Xr thread_exit 9 の中で終了し、プロセッサの制御が次の実行可能のスレッドに渡されることが 可能なとき。 .It .Xr thread_suspend_check 9 中で、全体としてのプロセスの停止状態のために、 スレッドが実行を停止する必要がある 場合。 .El .Pp .Fn mi_switch はプロセス構造体の中に現在のプロセスが実行された時間量を記録して、 そのスレッドに割当てられている CPU の時間リミット .Xr ( getrlimit 2 を参照) に照らしてこの値を検査します。 ソフトリミットの超過はそのプロセスに .Dv SIGXCPU シグナルが配信される結果を招き、一方ハードリミットの超過は .Dv SIGKILL を引き起こします。 これらの管理上の仕事が完了した後で、 .Fn mi_switch は実際にプロセスコンテキストスイッチを行なうマシン依存ルーチン .Fn cpu_switch に制御を引き渡します。 .Pp .Fn cpu_switch は優先度キューデータ構造において、 実行準備のできているプロセスの中から選択します。 優先度キューは、キュー先頭構造体である配列 .Va qs[NQS] で構成されます。 個々のキュー先頭構造体により、 同じ優先度の実行可能なプロセスのリストを識別します .Fa ( を参照)。 単一の語 .Va whichqs は、空ではないキューが分かるビットマスクを含み、 素早くプロセスを選択することを助けます。 .Fn cpu_switch は最も高い優先度を持つキュー上のリスト .Po Va qs の中の低いインデックスが高い優先度を示す .Pc から最初のプロセスを削除しなければならず、グローバル変数 .Dv curproc にそのプロセス構造体のアドレスを割当てなければなりません。 実行キュー上に利用可能なプロセスがない場合には、 .Fn cpu_switch は .Dq idle ループに移行することになっています。 idle ループは割り込みを許可する必要があります。 これにより、やがてプロセスが実行キュー上に再び現れます。 .Fn cpu_switch がこの発生を待っている間は変数 .Va curproc は .Dv NULL であるべきです。 .Pp .Fn mi_switch および当然 .Fn cpu_switch は splhigh() で呼び出されるべきであることに注意してください。 .Pp .Sh 関連項目 .Xr issignal 9 , .Xr spl 9 , .Xr tsleep 9 , .Xr wakeup 9 .Pp diff --git a/ja_JP.eucJP/man/man9/microseq.9 b/ja_JP.eucJP/man/man9/microseq.9 index d1c9d21bf8..ceec444174 100644 --- a/ja_JP.eucJP/man/man9/microseq.9 +++ b/ja_JP.eucJP/man/man9/microseq.9 @@ -1,492 +1,492 @@ .\" Copyright (c) 1998, 1999, Nicolas Souchu .\" 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 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/microseq.9,v 1.16 2001/10/01 16:09:25 ru Exp % +.\" %FreeBSD: src/share/man/man9/microseq.9,v 1.17 2002/12/27 12:15:34 schweikh Exp % .\" $FreeBSD$ .\" .Dd June 6, 1998 .Dt MICROSEQ 9 .Os .Sh 名称 .Nm microseq .Nd ppbus マイクロシーケンサ開発者ガイド .Sh 書式 .In sys/types.h .In dev/ppbus/ppbconf.h .In dev/ppbus/ppb_msq.h .Sh 解説 ppbus の解説およびマイクロシーケンサについての一般的な情報は .Xr ppbus 4 を参照してください。 .Pp この文書の目的は以下を得るために、 開発者がマイクロシーケンサ機構を使用するように支援することです。 .Bl -enum -offset indent .It 統一的なプログラミングモデル .It 効率的なコード .El .Pp マイクロシーケンスを使用する前に、 .Xr ppc 4 マイクロシーケンサの実装および .Xr vpo 4 の中のこれをどのように使用するかの例を見ることが、奨励されています。 .Sh PPBUS レジスタモデル .Ss 背景 ppbus のために選択されたパラレルポートモデルは PC パラレルポートモデルです。 従って、後で解説されるあらゆるレジスタは、PC パラレルポートの対になるものと 同じセマンティクスを持ちます。 より多くの ISA/ECP プログラミングについての情報については、 "Extended Capabilities Port Protocol and ISA interface Standard" として参照される Microsoft 標準を入手してください。 後述するレジスタは標準のパラレルポートレジスタです。 .Pp マスクマクロは、パラレルポートレジスタの個々の有効なビットのために 標準 ppbus インクルードファイルの中で定義されています。 .Ss データレジスタ コンパチブルモードまたはニブルモードでは、このレジスタへの書き込みは パラレルポートのデータ線へ出力されます。 その他のモードでは、出力段は制御レジスタ内の方向ビット (PDC) の設定によって、 トライステート (3 状態) になることができます。 このレジスタへの読み込みはデータ線上の値を返します。 .Ss デバイス状態レジスタ この読取り専用レジスタはパラレルポートインタフェース上の入力を反映します。 .Pp .Bl -column "ビット" "名前" "解説" -compact .It Em ビット Ta Em 名前 Ta Em 解説 .It 7 Ta nBUSY Ta "パラレルポートの Busy 信号の反転" .It 6 Ta nACK Ta "パラレルポートの nAck 信号" .It 5 Ta PERROR Ta "パラレルポートの PERROR 信号" .It 4 Ta SELECT Ta "パラレルポートの Select 信号" .It 3 Ta nFAULT Ta "パラレルポートの nFault 信号" .El .Pp その他は予約済みで、読込み時の結果は未定義です。 .Ss デバイス制御レジスタ このレジスタは直接的に幾つかの機能の有効化はもちろん、 幾つかの出力信号を制御します。 .Pp .Bl -column "ビット" "名前 " "解説" -compact .It Em ビット Ta Em 名前 Ta Em 解説 .It 5 Ta PCD Ta "拡張モード時の方向ビット" .It 4 Ta IRQENABLE Ta "1 で nAck の立ち上りで割り込み有効" .It 3 Ta SELECTIN Ta "パラレルポートの nSelect 信号の反転を出力" .It 2 Ta nINIT Ta "パラレルポートの nInit 信号を出力" .It 1 Ta AUTOFEED Ta "パラレルポートの nAutoFd 信号の反転を出力" .It 0 Ta STROBE Ta "パラレルポートの nStrobe 信号の反転を出力" .El .Sh マイクロインストラクション .Ss 解説 .Em マイクロインストラクション はパラレルポートのアクセス、プログラムの繰り返し、サブマイクロシーケンス または C の呼び出しです。 パラレルポートは .Xr ppbus 4 で解説されている論理モデルとみなされなければなりません。 .Pp 利用可能なマイクロシーケンスは以下のとおりです。 .Bd -literal #define MS_OP_GET 0 /* get , */ #define MS_OP_PUT 1 /* put , */ #define MS_OP_RFETCH 2 /* rfetch , , */ #define MS_OP_RSET 3 /* rset , , */ #define MS_OP_RASSERT 4 /* rassert , */ #define MS_OP_DELAY 5 /* delay */ #define MS_OP_SET 6 /* set */ #define MS_OP_DBRA 7 /* dbra */ #define MS_OP_BRSET 8 /* brset , */ #define MS_OP_BRCLEAR 9 /* brclear , */ #define MS_OP_RET 10 /* ret */ #define MS_OP_C_CALL 11 /* c_call , */ #define MS_OP_PTR 12 /* ptr */ #define MS_OP_ADELAY 13 /* adelay */ #define MS_OP_BRSTAT 14 /* brstat , , */ #define MS_OP_SUBRET 15 /* subret */ #define MS_OP_CALL 16 /* call */ #define MS_OP_RASSERT_P 17 /* rassert_p , */ #define MS_OP_RFETCH_P 18 /* rfetch_p , , */ #define MS_OP_TRIG 19 /* trigger , , */ .Ed .Ss 実行コンテキスト マイクロインストラクションの .Em 実行コンテキスト は以下のとおりです。 .Bl -bullet -offset indent .It メインのマイクロシーケンスの中またはサブコールの中の、実行するための 次のマイクロインストラクションを指し示す .Em プログラムカウンタ .It 送る/受け取るための次の文字を指し示す .Em ptr の現在の値 .It 内部の .Em 分岐レジスタ の現在の値 .El .Pp このデータは全てではない幾つかのマイクロインストラクションによって 変更されます。 .Ss MS_OP_GET および MS_OP_PUT は定義済みの標準 IEEE1284-1994 転送またはプログラムされた非標準の 入出力のいずれかを行なうために使用されるマイクロインストラクションです。 .Ss MS_OP_RFETCH - レジスタ取得 はパラレルポートレジスタの現在の値を取り出し、マスクを適用し、 それをバッファに保存するために使用されます。 .Pp パラメータ: .Bl -enum -offset indent .It レジスタ .It 文字マスク .It バッファへのポインタ .El .Pp 定義済みマクロ: MS_RFETCH(reg,mask,ptr) .Ss MS_OP_RSET - レジスタ設定 は 2 つのマスクを適用された、個々のパラレルポートレジスタの幾つかの ビットをアサート/クリアするために使用されます。 .Pp パラメータ: .Bl -enum -offset indent .It レジスタ .It アサートされるべきビットのマスク .It クリアされるべきビットのマスク .El .Pp 定義済みマクロ: MS_RSET(reg,assert,clear) .Ss MS_OP_RASSERT - レジスタアサート は個々のパラレルポートレジスタの全てのビットをアサートするために使用されます。 .Pp パラメータ: .Bl -enum -offset indent .It レジスタ .It アサートされるべきバイト .El .Pp 定義済みマクロ: MS_RASSERT(reg,byte) .Ss MS_OP_DELAY - マイクロ秒の遅延 はマイクロシーケンスの実行の遅延のために使用されます。 .Pp パラメータ: .Bl -enum -offset indent .It マイクロ秒単位の遅延時間 .El .Pp 定義済みマクロ: MS_DELAY(delay) .Ss MS_OP_SET - 内部分岐レジスタの設定 は内部の分岐レジスタの値を設定するために使用します。 .Pp パラメータ: .Bl -enum -offset indent .It 整数値 .El .Pp 定義済みマクロ: MS_SET(accum) .Ss MS_OP_DBRA - 分岐の実行 は内部の分岐レジスタが 1 減らされた結果の値が正である場合に 分岐するために使用されます。 .Pp パラメータ: .Bl -enum -offset indent .It 現在実行された (サブ) マイクロシーケンスの整数のオフセット。 オフセットは次に実行されるマイクロインストラクションの インデクスに追加されます。 .El .Pp 定義済みマクロ: MS_DBRA(offset) .Ss MS_OP_BRSET - セット時に分岐 はパラレルポートの状態レジスタのビットの幾つかがセットされている場合に 分岐するために使用されます。 .Pp パラメータ: .Bl -enum -offset indent .It 状態レジスタのビット .It 現在実行された (サブ) マイクロシーケンスの整数のオフセット。 オフセットは次に実行されるマイクロインストラクションの インデクスに追加されます。 .El .Pp 定義済みマクロ: MS_BRSET(mask,offset) .Ss MS_OP_BRCLEAR - クリア時に分岐 はパラレルポートの状態レジスタのビットの幾つかがクリアされている場合に 分岐するために使用されます。 .Pp パラメータ: .Bl -enum -offset indent .It 状態レジスタのビット .It 現在実行された (サブ) マイクロシーケンスの整数のオフセット。 オフセットは次に実行されるマイクロインストラクションの インデクスに追加されます。 .El .Pp 定義済みマクロ: MS_BRCLEAR(mask,offset) .Ss MS_OP_RET - 戻る はマイクロシーケンスから戻るために使用されます。 この関数は必須です。 これはマイクロシーケンサがマイクロシーケンスの終わりを検出する唯一の方法です。 ppb_MS_microseq() の (int *) パラメータによって指される整数に、 リターンコードが返されます。 .Pp パラメータ: .Bl -enum -offset indent .It 整数のリターンコード .El .Pp 定義済みマクロ: MS_RET(code) .Ss MS_OP_C_CALL - C 関数の呼び出し はマイクロシーケンスの実行から C 関数を呼び出すために使用されます。 これはパラレルポートからデータ文字を取り出すために非標準の入出力が実行 されるときに有用かもしれません。 .Pp パラメータ: .Bl -enum -offset indent .It 呼び出すべき C 関数 .It 関数呼び出しのために渡されるパラメータ .El .Pp C 関数は .Ft int(*)(void *p, char *ptr) と宣言されることになっています。 ptr パラメータは現在走査されているバッファの中の現在位置です。 .Pp 定義済みマクロ: MS_C_CALL(func,param) .Ss MS_OP_PTR - 内部ポインタの初期化 は現在走査されているバッファへの内部ポインタを初期化します。 このポインタはあらゆる C 呼び出しに渡されます (上記を参照してください)。 .Pp パラメータ: .Bl -enum -offset indent .It xxx_P() マイクロシーケンスの呼び出しによってアクセスされることになっている バッファへのポインタ。 このポインタは xxx_P() 呼び出しの間自動的に増やされることに注意してください。 .El .Pp 定義済みマクロ: MS_PTR(ptr) .Ss MS_OP_ADELAY - 非同期遅延の実行 はマイクロシーケンスの実行の間に tsleep() するために使用されます。 この tsleep は PPBPRI レベルで実行されます。 .Pp パラメータ: .Bl -enum -offset indent .It ミリ秒単位での遅延時間 .El .Pp 定義済みマクロ: MS_ADELAY(delay) .Ss MS_OP_BRSTAT - 状態による分岐 は状態レジスタの状態で分岐するために使用されます。 .Pp パラメータ: .Bl -enum -offset indent .It アサートされたビットのマスク。 状態レジスタの中のアサートされるはずのビットがマスクにセットされます。 .It クリアされたビットのマスク。 状態レジスタの中のクリアされるはずのビットがマスクにセットされます。 .It 現在実行された (サブ) マイクロシーケンスの整数のオフセット。 オフセットは次に実行されるマイクロインストラクションの インデクスに追加されます。 .El .Pp 定義済みマクロ: MS_BRSTAT(asserted_bits,clear_bits,offset) .Ss MS_OP_SUBRET - サブマイクロシーケンスから戻る はサブマイクロシーケンスの呼び出しから戻るために使用されます。 この行動は RET の呼び出しの前に必須です。 幾つかのマイクロインストラクション (PUT, GET) はサブマイクロシーケンスの 内部では呼び出し可能ではないかもしれません。 .Pp パラメータはありません。 .Pp 定義済みマクロ: MS_SUBRET() .Ss MS_OP_CALL - サブマイクロシーケンスの呼び出し はサブマイクロシーケンスを呼び出すために使用されます。 サブマイクロシーケンスは SUBRET の呼び出しを伴なうマイクロシーケンスです。 .Pp パラメータ: .Bl -enum -offset indent .It 実行されるべきサブマイクロシーケンス .El .Pp 定義済みマクロ: MS_CALL(microseq) .Ss MS_OP_RASSERT_P - 内部 PTR からレジスタへのアサート は内部の PTR ポインタによって現在指されているデータでレジスタを アサートするために使用されます。 .Pp パラメータ: .Bl -enum -offset indent .It レジスタに書込むためのデータ量 .It レジスタ .El .Pp 定義済みマクロ: MS_RASSERT_P(iter,reg) .Ss MS_OP_RFETCH_P - 内部 PTR へのレジスタフェッチ はレジスタからデータを読込むために使用されます。 データは内部の PTR ポインタによって現在指されているバッファに保存されます。 .Pp パラメータ: .Bl -enum -offset indent .It レジスタから読込むためのデータ量 .It レジスタ .It 読込まれたデータに適用されるマスク .El .Pp 定義済みマクロ: MS_RFETCH_P(iter,reg,mask) .Ss MS_OP_TRIG - レジスタのトリガ はパラレルポートをトリガするために使用されます。 このマイクロインストラクションはパラレルポートのとても効率的な制御の 提供を意図されています。 レジスタのトリガはデータ書込み、少しウェイト、データ書込み、 少しウェイト ... です。 これはポートへマジックシーケンスを書込むことを可能にします。 .Pp パラメータ: .Bl -enum -offset indent .It .\" 原文は読込まれる --- send-pr すべき? レジスタに書込まれるデータ量 .It レジスタ .It 配列の大きさ .It unsigned char の配列。 個々の u_char の組はレジスタに書込むべきデータおよび マイクロ秒単位でのウェイトするべき遅延時間です。 遅延時間は簡単化および配列の大きさの縮小のために 255 マイクロ秒までに 制限されています。 .El .Pp 定義済みマクロ: MS_TRIG(reg,len,array) .Sh マイクロシーケンス .Ss C 構造体 .Bd -literal union ppb_insarg { int i; char c; void *p; int (* f)(void *, char *); }; struct ppb_microseq { int opcode; /* マイクロインストラクション opcode */ union ppb_insarg arg[PPB_MS_MAXARGS]; /* 引数 */ }; .Ed .Ss マイクロシーケンスの使用 マイクロシーケンスを実体化するためには、ppb_microseq 構造体の配列を 宣言して必要に応じて初期化するだけです。 定義済みのマクロまたは ppb_microseq の定義に従った独自の マイクロインストラクションのいずれかを使用できます。 例えば、 .Bd -literal struct ppb_microseq select_microseq[] = { /* パラメータリスト */ #define SELECT_TARGET MS_PARAM(0, 1, MS_TYP_INT) #define SELECT_INITIATOR MS_PARAM(3, 1, MS_TYP_INT) /* 出力するための選択コマンドの送信 */ MS_DASS(MS_UNKNOWN), MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE), MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), MS_DASS(MS_UNKNOWN), MS_CASS( H_AUTO | H_nSELIN | H_nINIT | H_STROBE), /* 出力の準備ができるまで待ちます */ MS_SET(VP0_SELTMO), /* loop: */ MS_BRSET(H_ACK, 2 /* ready */), MS_DBRA(-2 /* loop */), /* error: */ MS_RET(1), /* ready: */ MS_RET(0) }; .Ed .Pp ここで、幾つかのパラメータが未定義でマイクロシーケンスの実行の前に 満たされなければなりません。 個々のマイクロシーケンスを初期化するために、ppb_MS_init_msq() 関数を 以下のように使用するべきです。 .Bd -literal ppb_MS_init_msq(select_microseq, 2, SELECT_TARGET, 1 << target, SELECT_INITIATOR, 1 << initiator); .Ed .Pp それからマイクロシーケンスを実行します。 .Ss マイクロシーケンサ マイクロシーケンサは ppbus レベルまたはアダプタレベル (ppbus の システムレイヤについての情報は .Xr ppbus 4 を参照してください) のいずれかで実行されます。 マイクロシーケンサの殆んどは、ppbus からアダプタへの関数呼び出しの オーバヘッドを避けるために、ppc レベルで実行されます。 しかし、その転送は IEEE1284-1994 に合致しているのに反して、 いくつかの決まりきった様な機能は ppbus レイヤで実行されます。 .Sh バグ 1 レベルのサブマイクロシーケンスのみが認められています。 .Pp ポートのトリガ時は、許可されている最大の遅延は 255 マイクロ秒です。 .Sh 関連項目 .Xr ppbus 4 , .Xr ppc 4 , .Xr vpo 4 .Sh 歴史 .Nm のマニュアルページは .Fx 3.0 ではじめて登場しました。 .Sh 作者 このマニュアルページは .An Nicolas Souchu が書きました。 diff --git a/ja_JP.eucJP/man/man9/sleep.9 b/ja_JP.eucJP/man/man9/sleep.9 index 45c3326ef5..115fbf23a1 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.34 2002/03/18 10:43:49 ru Exp % +.\" %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 によってスリープ状態に置かれます。 パラメータ .Ar ident は、プロセスがどのイベント上でスリープしているかを識別する一意的な 任意のアドレスです。 単一の .Ar ident 上でスリープしている全てのプロセスは後で、 .Nm wakeup によって起こされます。これは、しばしば割り込みルーチンの中から呼び出され、 プロセスがブロックしているリソースが現在利用可能になったことを示します。 .Pp パラメータ .Ar wmesg は .Xr ps 1 のようなツールのためのスリープ状態を解説する文字列です。 これらのプログラムの任意の文字列を表示するための領域の制限のため、 このメッセージは 6 文字を超えるべきではありません。 .Pp .Fn wakeup_one 関数はパラメータ .Fa ident 上でスリープしているキューの中の最初のプロセスを実行可能に するために使用されます。 これは、多数のプロセスが同じアドレス上でスリープしているが、 実行可能となったときその中の 1 つのみが実際には役に立つ作業ができるときに、 システムが飽和することを防ぐことが可能です。 .Pp .Nm 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 -は tsleep の変種です。パラメータ +関数は tsleep の変種です。パラメータ .Ar mtx は、スリープの前に抜け、 .Nm 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 -は +関数は .Bx 4.4 で登場しました。 .Pp -.Nm sleep -は伝統的な形式のために使用されます。 +.Nm +関数は伝統的な形式のために使用されます。 これはタイムアウトまたは .Ar wmesg を明示させないため、中止されています。 .Sh 作者 .An -nosplit このマニュアルページは -.An J\(:org Wunsch . +.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 da84b4166f..004e33a2a6 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.97 2002/11/29 11:39:20 ru Exp % +.\" %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.97 2002/11/29 11:39:20 ru Exp $ + * $\&FreeBSD: src/share/man/man9/style.9,v 1.98 2002/12/27 12:15:34 schweikh 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.95 2002/11/01 16:20:31 rwatson Exp $"); +__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/sysctl_add_oid.9 b/ja_JP.eucJP/man/man9/sysctl_add_oid.9 index 4b96ff462c..1f060e2bf8 100644 --- a/ja_JP.eucJP/man/man9/sysctl_add_oid.9 +++ b/ja_JP.eucJP/man/man9/sysctl_add_oid.9 @@ -1,485 +1,485 @@ .\" .\" Copyright (c) 2000, Andrzej Bialecki .\" 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. The name of the author may not be used to endorse or promote products .\" derived from this software without specific prior written permission. .\" .\" 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/share/man/man9/sysctl_add_oid.9,v 1.16 2002/01/09 11:43:48 mpp Exp % +.\" %FreeBSD: src/share/man/man9/sysctl_add_oid.9,v 1.17 2003/01/04 17:01:50 schweikh Exp % .\" $FreeBSD$ .\" .Dd July 15, 2000 .Dt SYSCTL_ADD_OID 9 .Os .Sh 名称 .Nm sysctl_add_oid , .Nm sysctl_remove_oid .Nd ランタイム sysctl ツリー操作 .Sh 書式 .In sys/types.h .In sys/sysctl.h .Ft struct sysctl_oid * .Fo sysctl_add_oid .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const char *name" .Fa "int kind" .Fa "void *arg1" .Fa "int arg2" .Fa "int (*handler) (SYSCTL_HANDLER_ARGS)" .Fa "const char *format" .Fa "const char *descr" .Fc .Ft int .Fo sysctl_remove_oid .Fa "struct sysctl_oid *oidp" .Fa "int del" .Fa "int recurse" .Fc .Ft struct sysctl_oid_list * .Fo SYSCTL_CHILDREN .Fa "struct sysctl_oid *oidp" .Fc .Ft struct sysctl_oid_list * .Fo SYSCTL_STATIC_CHILDREN .Fa "struct sysctl_oid_list OID_NAME" .Fc .Ft struct sysctl_oid * .Fo SYSCTL_ADD_OID .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const cha *name" .Fa "int kind" .Fa "void *arg1" .Fa "int arg2" .Fa "int (*handler) (SYSCTL_HANDLER_ARGS)" .Fa "const char *format" .Fa "const char *descr" .Fc .Ft struct sysctl_oid * .Fo SYSCTL_ADD_NODE .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const char *name" .Fa "int access" .Fa "int (*handler) (SYSCTL_HANDLER_ARGS)" .Fa "const char *descr" .Fc .Ft struct sysctl_oid * .Fo SYSCTL_ADD_STRING .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const char *name" .Fa "int access" .Fa "char *arg" .Fa "int len" .Fa "const char *descr" .Fc .Ft struct sysctl_oid * .Fo SYSCTL_ADD_INT .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const char *name" .Fa "int access" .Fa "int *arg" .Fa "int len" .Fa "const char *descr" .Fc .Ft struct sysctl_oid * .Fo SYSCTL_ADD_UINT .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const char *name" .Fa "int access" .Fa "unsigned int *arg" .Fa "int len" .Fa "const char *descr" .Fc .Ft struct sysctl_oid * .Fo SYSCTL_ADD_LONG .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const char *name" .Fa "int access" .Fa "long *arg" .Fa "const char *descr" .Fc .Ft struct sysctl_oid * .Fo SYSCTL_ADD_ULONG .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const char *name" .Fa "int access" .Fa "unsigned long *arg" .Fa "const char *descr" .Fc .Ft struct sysctl_oid * .Fo SYSCTL_ADD_OPAQUE .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const char *name" .Fa "int access" .Fa "void *arg" .Fa "int len" .Fa "const char *format" .Fa "const char *descr" .Fc .Ft struct sysctl_oid * .Fo SYSCTL_ADD_STRUCT .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const char *name" .Fa "int access" .Fa "void *arg" .Fa STRUCT_NAME .Fa "const char *descr" .Fc .Ft struct sysctl_oid * .Fo SYSCTL_ADD_PROC .Fa "struct sysctl_ctx_list *ctx" .Fa "struct sysctl_oid_list *parent" .Fa "int number" .Fa "const char *name" .Fa "int access" .Fa "void *arg1" .Fa "int arg2" .Fa "int (*handler) (SYSCTL_HANDLER_ARGS)" .Fa "const char *format" .Fa "const char *descr" .Fc .Sh 解説 これらの関数およびマクロは sysctl oid のランタイム (例えばモジュールの 存在期間) での作成と削除のためのインタフェースを提供します。 リンカセット (詳細は .Aq sys/linker_set.h および .\" XXX マニュアルページはソースファイルの参照を避けるべきです。 .Pa src/sys/kern/kern_sysctl.c を参照) に基づく代わりの方法は、各々のモジュールのロード時およびアンロード時の 作成と削除のみを可能にします。 .Pp 型 .Dv CTLTYPE_NODE の動的な oid は再利用可能であるため、複数のコードセクションが、 oid を作成および削除することが可能です。 実際には、参照カウントに基づいて、その割り当ておよび解放が行われます。 その結果として、2 つ以上のコードセクションが、部分的に重なり、 両者が使用できるツリーを作成可能にします。 重なる葉の作成や、同一の名前と親を持つ異なる型の子の作成は、 不可能です。 .Pp 新しく作成された oid は親のノードに接続されます。 これら全ての関数およびマクロ .Fn ( sysctl_remove_oid は例外) において、必須パラメータの 1 つ .Fa parent は、子の親リストの先頭を指します。 .Pp 殆どのトップレベルのカテゴリは静的に作成されます。 既存の静的な oid に接続するときに、このポインタは .Fn SYSCTL_STATIC_CHILDREN マクロによって取得することが可能で、その .Fa OID_NAME 引数は .Dv CTLTYPE_NODE 型の親 oid の名前 (すなわち、 .Xr sysctl 8 によって表示される名前に、 アンダスコアを前置し、全てのドットをアンダスコアで置き換えた名前) です。 .Pp 既存の動的な oid に接続するときに、このポインタは .Fn SYSCTL_CHILDREN マクロによって取得することが可能で、その .Fa oidp 引数は .Dv CTLTYPE_NODE 型の親 oid を指します。 .Pp .Fn sysctl_add_oid 関数はあらゆる型の生の oid を作成します。 oid の作成が成功した場合には、この関数はその oid へのポインタを返します。 そうでない場合には、 .Dv NULL を返します。 .Fn sysctl_add_oid のための引数の多くはマクロと共通です。 引数は以下のとおりです。 .Bl -tag -width handler .It Fa ctx オプションの sysctl コンテキストへのポインタ、または .Dv NULL です。 詳細は .Xr sysctl_ctx_init 9 を参照してください。 特別な作成および削除のシーケンスが要求されるのでなければ、 作成する動的な oid を組織するためにコンテキストを使用することを、 プログラマは強く勧告されています。 .Fa ctx が .Dv NULL でない場合には、新しく作成される oid は最初のエントリとしてこのコンテキストに 追加されます。 .It Fa parent 子の親リストの先頭である .Li struct sysctl_oid_list へのポインタです。 .It Fa number この oid に割り当てられる oid 番号です。 殆ど全ての場合、これは割り当て時に次の利用可能な oid 番号になる .Dv OID_AUTO に設定されるべきです。 .It Fa name この oid の名前です。 新しく作成された oid は名前のコピーを含んでいます。 .It Fa kind oid の種類で、 .Aq sys/sysctl.h ヘッダファイルの中で定義される型とアクセス値のビットマスクとして明示されます。 動的に作成された oid は常に -.Dv CTLTYPE_DYN +.Dv CTLFLAG_DYN フラグが設定されます。 アクセスフラグはこの oid が読み取り専用か読み書き可能か、および 全てのユーザによってまたはスーパユーザによってのみ修正可能かを明示します。 .It Fa arg1 oid が参照すべきあらゆるデータへのポインタ、または .Dv NULL です。 .It Fa arg2 .Fa arg1 の大きさ、または .Fa arg1 が .Dv NULL であれば 0 です。 .It Fa handler この oid への読み書き要求を取り扱う責任がある関数へのポインタです。 ノード、整数、文字列、および不透明なオブジェクトの操作をサポートする 幾つかの標準ハンドラが存在しています。 .Fn SYSCTL_ADD_PROC マクロを使用して新しいハンドラを定義することも可能です。 .It Fa format oid のフォーマットを記号的に明示する文字列へのポインタです。 このフォーマットは、表示目的のための適切なデータフォーマットを適用するために .Xr sysctl 8 によってヒントとして使用されます。 現在使用されているフォーマット名は以下のとおりです。 .Dq N はノード、 .Dq A は .Li "char *" 型、 .Dq I は .Li "int" 型、 .Dq IU は .Li "unsigned int" 型、 .Dq L は .Li "long" 型、 .Dq LU は .Li "unsigned long" 型、および .Dq S,TYPE は .Li "struct TYPE" 構造体です。 .It Fa descr この oid の解説テキストへのポインタです。 .El .Pp .Fn sysctl_remove_oid 関数は動的に作成された oid をツリーから削除し、 オプションでそのリソースを解放します。 これは以下の引数を取ります。 .Bl -tag -width recurse .It Fa oidp 削除されるべき動的な oid へのポインタです。 oid が動的でない、またはポインタが .Dv NULL の場合には、この関数は .Er EINVAL を返します。 .It Fa del 0 でない場合には、oid の参照カウントが 0 になった時に、 .Fn sysctl_remove_oid は oid のリソースを解放しようとします。 しかしながら .Fa del が 0 に設定されている場合には、このルーチンは oid のリソースの解放をせずに ツリーから oid の登録抹消のみを行ないます。 この振舞いは、呼び出し側が後で (ひょっとすると部分的に失敗する) 多数の oid の 削除のロールバックを予期している時に、有用です。 .It Fa recurse 0 でない場合には、そのノードとその子を削除しようとします。 .Pa recurse が 0 に設定されている場合には、あらゆる子を含むノードの削除の試みは .Er ENOTEMPTY エラーを発生させます。 .Em 警告 : "再帰的な削除は非常な注意を払って使用すること" ! 通常、コンテキストが使用されていれば、必要とされるべきではありません。 コンテキストはツリーの利用者間の依存性の追跡に注意しています。 しかしながら、ある極端な場合には、ある他のリソースを解放するために、 それがどのように作成されたものであれ、サブツリーの一部を削除することが 必要になることがあります。 しかしながら、このことは、別のコードセクションが削除されたサブツリーを 使用し続ける場合に、システムの .Xr panic 9 を引き起こすことがあることを知っていてください。 .El .Pp .\" XXX sheldonh はここまで仕上げました。 再度言いますが、殆んどの場合、作成された oid を見失わないようにするため、 および後で整然とした流儀でそれらを削除するため、 .Xr sysctl_ctx_init 9 で解説されているように、プログラマはコンテキストを使用するべきです。 .Pp 与えられた型の oid の作成を助ける定義済みのマクロセットがあります。 .Bl -tag -width SYSCTL_ADD_STRINGXX それらを以下に示します。 .It Fn SYSCTL_ADD_OID は生の oid を作成します。 このマクロは機能的には .Fn sysctl_add_oid 関数と同等です。 .It Fn SYSCTL_ADD_NODE は型 .Dv CTLTYPE_NODE の oid を作成します。 この oid に対して、子の oid を追加可能です。 .It Fn SYSCTL_ADD_STRING は 0 で終端された文字列を取り扱う oid を作成します。 .It Fn SYSCTL_ADD_INT は .Li int 変数を取り扱う oid を作成します。 .It Fn SYSCTL_ADD_UINT は .Li unsigned int 変数を取り扱う oid を作成します。 .It Fn SYSCTL_ADD_LONG は .Li long 変数を取り扱う oid を作成します。 .It Fn SYSCTL_ADD_ULONG は .Li unsigned long 変数を取り扱う oid を作成します。 .It Fn SYSCTL_ADD_OPAQUE は .Li "size_t *" へのポインタである .Fa len 引数によって明示された大きさのあらゆる不透明なデータのかたまりを 取り扱う oid を作成します。 .It Fn SYSCTL_ADD_STRUCT は .Li "struct TYPE" 構造体を取り扱う oid を作成します。 .Fa format 引数は .Xr sysctl 8 ユーティリティへの適切なヒントを提供するために .Dq S,TYPE に設定されます。 .It Fn SYSCTL_ADD_PROC は明示された .Pa handler ハンドラ関数を持つ oid を作成します。 ハンドラは oid に対しての読み書き要求を取り扱う責任を持ちます。 カーネルデータが簡単にアクセスできない場合、または取り出される前に処理される 必要がある場合に、この oid 型は特に有用です。 .El .Sh 使用例 以下は、どのように新しいトップレベルのカテゴリを作成するか、および どのように既存の静的なノードに別のサブツリーを引っ掛けるか を示す使用例です。 この使用例はコンテキストを使用していません。 これは全ての後でそれらを解放するといった、 中間の oid の退屈な管理を結果として生じさせます。 .Bd -literal #include ... /* 新しく作成したサブツリーへのポインタは、後でそれらを解放するために * 保存しておく必要があります。 */ struct sysctl_oid *root1, *root2, *oidp; int a_int; char *string = "dynamic sysctl"; ... root1 = SYSCTL_ADD_NODE( NULL, SYSCTL_STATIC_CHILDREN(/* tree top */), OID_AUTO, "newtree", CTFLAG_RW, 0, "new top level tree"); oidp = SYSCTL_ADD_INT( NULL, SYSCTL_CHILDREN(root1), OID_AUTO, "newint", CTLFLAG_RW, &a_int, 0, "new int leaf"); ... root2 = SYSCTL_ADD_NODE( NULL, SYSCTL_STATIC_CHILDREN(_debug), OID_AUTO, "newtree", CTFLAG_RW, 0, "new tree under debug"); oidp = SYSCTL_ADD_STRING( NULL, SYSCTL_CHILDREN(root2), OID_AUTO, "newstring", CTLFLAG_R, string, 0, "new string leaf"); .Ed .Pp この使用例は以下のサブツリーを作成します。 .Bd -literal -offset indent debug.newtree.newstring newtree.newint .Ed .Pp .Em "これ以上必要でなくなった全ての oid は解放されるべきであることに注意!" .Sh 関連項目 .Xr sysctl 8 , .Xr sysctl_ctx_free 9 , .Xr sysctl_ctx_init 9 .Sh 歴史 これらの関数は .Fx 4.2 ではじめて登場しました。 .Sh 作者 .An Andrzej Bialecki Aq abial@FreeBSD.org .Sh バグ 多くのコードセクション間でノードを共有することは、 時々リソースをロックすることがある相互依存を引き起こします。 例えば、モジュール B によって作成された oid に対し、 モジュール A がサブツリーを引っ掛けた場合には、 モジュール B はその oid を削除できないでしょう。 これらの問題は sysctl コンテキストによって適切に取り扱われます。 .Pp ツリー上の多くの操作はリンクリストを横切ることを必要とします。 この理由のため、oid の作成と削除は相対的にコストがかかります。 diff --git a/ja_JP.eucJP/man/man9/vget.9 b/ja_JP.eucJP/man/man9/vget.9 index 2a5553af9c..19a4da14f7 100644 --- a/ja_JP.eucJP/man/man9/vget.9 +++ b/ja_JP.eucJP/man/man9/vget.9 @@ -1,73 +1,73 @@ .\" -*- 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/vget.9,v 1.7 2001/12/26 23:14:04 davidc Exp % +.\" %FreeBSD: src/share/man/man9/vget.9,v 1.8 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd July 24, 1996 .Os .Dt VGET 9 .Sh 名称 .Nm vget .Nd フリーリストから vnode を取得 .Sh 書式 .In sys/param.h .In sys/vnode.h .Ft int .Fn vget "struct vnode *vp" "int lockflag" "struct thread *td" .Sh 解説 フリーリストから vnode を取得し、その参照カウントをインクリメントします。 .Bl -tag -width lockflag .It Ar vp フリーリストから取り除く vnode。 .It Ar lockflag 0 でない場合は、その vnode はロックもされるでしょう。 .El .Pp 使用されなくなった時、vnode はフリーリストに保持されます。 これらの vnode は有効なファイルを参照していますが、 いつでも新しいファイルを参照するために再利用され得ます。 vnode は、名前キャッシュ等の システム中のキャッシュの中にも、しばしば保持されます。 .Pp フリーリスト上にある vnode が再利用される時、例えば .Xr VOP_LOOKUP 9 を呼び出した結果名前キャッシュにその vnode が見つかった場合、 参照カウントのインクリメントとフリーリストからの削除のために、 新しい使用者は -.Xr vget 9 +.Fn vget を呼び出すことが必要です。 .Sh 関連項目 .Xr vnode 9 , .Xr vput 9 , .Xr vref 9 , .Xr vrele 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/vnode.9 b/ja_JP.eucJP/man/man9/vnode.9 index c2a6ca768a..b6d1fea78a 100644 --- a/ja_JP.eucJP/man/man9/vnode.9 +++ b/ja_JP.eucJP/man/man9/vnode.9 @@ -1,274 +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.21 2002/12/12 17:25:58 ru Exp % +.\" %FreeBSD: src/share/man/man9/vnode.9,v 1.23 2003/01/19 15:44:32 sheldonh 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 }; -/* - * vnode のタグ型です。 - * 外部プログラム (例えば、pstat) のためだけにあり、決してカーネル - * によって検査されるべきではありません。 - */ -enum vtagtype { - VT_NON, VT_UFS, VT_NFS, VT_UNUSED, VT_PC, VT_LFS, VT_LOFS, VT_FDESC, - VT_PORTAL, VT_NULL, VT_UMAP, VT_KERNFS, VT_PROCFS, VT_AFS, VT_ISOFS, - VT_UNION, VT_MSDOSFS, VT_DEVFS, VT_TFS, VT_VFS, VT_CODA, VT_NTFS, - VT_HPFS, VTNWFS, VT_PSEUDOFS -}; - /* * 個々の下位ファイルシステムはその私的な領域を割り当て、それを * 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; /* 非ロックファイルシステム用 */ - enum vtagtype v_tag; /* 下位データの型 */ + 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 注 +.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 の相互獲得のために、 +LOR (ロック順序の逆転) を引き起こします。 .Sh 関連項目 +.Xr malloc 9 , .Xr VFS 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/vref.9 b/ja_JP.eucJP/man/man9/vref.9 index 79d5df65fb..e187e9b4e5 100644 --- a/ja_JP.eucJP/man/man9/vref.9 +++ b/ja_JP.eucJP/man/man9/vref.9 @@ -1,70 +1,70 @@ .\" -*- 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/vref.9,v 1.8 2001/10/01 16:09:25 ru Exp % +.\" %FreeBSD: src/share/man/man9/vref.9,v 1.9 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd July 24, 1996 .Os .Dt VREF 9 .Sh 名称 .Nm vref .Nd vnode の使用カウントのインクリメント .Sh 書式 .In sys/param.h .In sys/vnode.h .Ft void .Fn vref "struct vnode *vp" .Sh 解説 vnode の .Dv v_usecount フィールドをインクリメントします。 .Bl -tag -width 2n .It Ar vp インクリメントされる vnode。 .El .Pp 個々の vnode は、システムの何個の部分でその vnode が使用中であるかを示す 参照カウントを維持管理します。 これにより、 vnode がもはや使われなくなって別のファイル用に安全に再利用可能なことを、 ファイルシステムが検知可能となります。 .Pp vnode を使用中のシステム中の全てのコード (例えば、 あるアルゴリズムの操作中や、データ構造の格納時) は、 -.Xr vref 9 +.Fn vref を呼び出すべきです。 .Sh 関連項目 .Xr vget 9 , .Xr vnode 9 , .Xr vput 9 , .Xr vrele 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/vrele.9 b/ja_JP.eucJP/man/man9/vrele.9 index e13137c90e..f29cc01f2c 100644 --- a/ja_JP.eucJP/man/man9/vrele.9 +++ b/ja_JP.eucJP/man/man9/vrele.9 @@ -1,67 +1,67 @@ .\" -*- 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/vrele.9,v 1.9 2001/10/01 16:09:25 ru Exp % +.\" %FreeBSD: src/share/man/man9/vrele.9,v 1.10 2002/12/24 13:41:46 ru Exp % .\" .\" $FreeBSD$ .Dd July 24, 1996 .Os .Dt VRELE 9 .Sh 名称 .Nm vrele .Nd vnode の使用カウントのデクリメント .Sh 書式 .In sys/param.h .In sys/vnode.h .Ft void .Fn vrele "struct vnode *vp" .Sh 解説 vnode の .Dv v_usecount フィールドをデクリメントします。 .Bl -tag -width 2n .It Ar vp デクリメントされる vnode。 .El .Pp vnode を使用中のシステム中の全てのコードは、 その vnode を使い終えた時には、 -.Xr vrele 9 +.Fn vrele を呼び出すべきです。 その vnode の .Dv v_usecount フィールドが 0 に達した場合には、その vnode はフリーリストに置かれます。 .Sh 関連項目 .Xr vget 9 , .Xr vnode 9 , .Xr vput 9 , .Xr vref 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/vslock.9 b/ja_JP.eucJP/man/man9/vslock.9 index 6f5d6f2fd8..9a314a85df 100644 --- a/ja_JP.eucJP/man/man9/vslock.9 +++ b/ja_JP.eucJP/man/man9/vslock.9 @@ -1,75 +1,75 @@ .\" %NetBSD: vslock.9,v 1.1 1996/06/15 20:47:29 pk Exp % .\" .\" 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. .\" -.\" %FreeBSD: src/share/man/man9/vslock.9,v 1.9 2001/12/26 23:14:04 davidc Exp % +.\" %FreeBSD: src/share/man/man9/vslock.9,v 1.10 2003/01/21 11:34:57 alfred Exp % .\" .\" $FreeBSD$ .Dd June 15, 1996 .Dt VSLOCK 9 .Os .Sh 名称 .Nm vslock , .Nm vsunlock .Nd ユーザ空間のアドレスのメモリへのロックとアンロック .Sh 書式 .In sys/param.h .In sys/proc.h .In vm/vm.h .In vm/vm_extern.h .Ft void -.Fn vslock "caddr_t addr" "u_int len" +.Fn vslock "void *addr" "u_int len" .Ft void -.Fn vsunlock "caddr_t addr" "u_int len" +.Fn vsunlock "void *addr" "u_int len" .Sh 解説 .Fn vslock および .Fn vsunlock 関数は現在実行中のプロセスに属するアドレスの範囲を メモリ中にそれぞれロックしたりアンロックしたりします。 ロックされる実際のメモリ量はマシンのページサイズの倍数になります。 開始ページナンバーは .Fa addr をすぐ前のページ境界に切りつめられ、終了ページは .Fa addr + .Fa len の次のページ境界に切り上げられて計算されます。 この操作に使用されるプロセスのコンテキストはグローバル変数 .Va curproc を参照します。 .Sh 関連項目 .Xr physio 9 .Sh バグ 引数としてプロセスのポインタを渡すべきです。