diff --git a/ja_JP.eucJP/man/man2/i386_vm86.2 b/ja_JP.eucJP/man/man2/i386_vm86.2 index 20cefc7f0a..952d9d4fbc 100644 --- a/ja_JP.eucJP/man/man2/i386_vm86.2 +++ b/ja_JP.eucJP/man/man2/i386_vm86.2 @@ -1,97 +1,128 @@ .\" Copyright (c) 1998 Jonathan Lemon .\" 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/lib/libc/i386/sys/i386_vm86.2,v 1.12 2002/12/19 09:40:22 ru Exp % +.\" %FreeBSD: src/lib/libc/i386/sys/i386_vm86.2,v 1.13 2003/04/29 08:35:28 mdodd Exp % .\" .\" $FreeBSD$ .Dd July 27, 1998 .Os .Dt I386_VM86 2 .Sh 名称 .Nm i386_vm86 .Nd vm86 に関連する関数を制御する .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In machine/sysarch.h .In machine/vm86.h .Ft int .Fn i386_vm86 "int function" "void *data" .Sh 解説 .Fn i386_vm86 システムコールは vm86 に関連するさまざまな関数を呼び出すのに使用します。 .Fa function 引数は次の値の内の 1 つにできます。 .Bl -tag -offset indent -width VM86_SET_VME .It Dv VM86_INIT カーネルのプロセス用 vm86 パラメータ領域を初期化し、プロセスが vm86 呼び出しを できるようにします。 .Fa data 引数は次の構造体を指します。 .Bd -literal struct vm86_init_args { int debug; int cpu_type; u_char int_map[32]; }; .Ed .Pp .Fa debug 引数はデバッグコードをオンにするために使用されます。 .Fa cpu_type 引数はエミュレート中のタイプの CPU を制御するものですが、 現時点では実装されていません。 .Fa int_map 引数は、vm86 割り込みを vm86 モードで処理する必要があるか、またはプロセスに 反映して戻される必要があるかどうかを決定するビットマップです。 .Em N 番め のビットが設定されている場合、割り込みはプロセスに反映されます。 そうでない場合、 vm86 割り込みテーブルによってディスパッチされます。 +.It Dv VM86_INTCALL +プロセスが vm86 割り込みハンドラを呼び出せるようにします。 +これは効果的に INT 命令をシミュレートします。 +.Fa data +は下記の構造体を指し示しているべきです: +.Bd -literal +struct vm86_intcall_args { + int intnum; + struct vm86frame vmf; +}; +.Ed +.Pp +.Fa intnum +はシミュレートされた呼び出しのための INT のオペランドを指定します。 +例えば、値 0x10 は VGA BIOS への呼び出しのためによく使用されます。 +.Fa vmf +は割り込みハンドラのための呼び出し規約に従って、CPU のレジスタを +初期化するために使用されます。 +.It Dv VM86_GET_VME +Pentium(r) プロセッサの VME (仮想 8086 モード拡張) フラグ +である CR4 の ビット 0 の現在の状態を取り出すために使用されます。 +.Fa data +は下記を指し示すように初期化されるべきです: +.Bd -literal +struct vm86_vme_args { + int state; /* 状態 */ +}; +.Ed +.Pp +.Fa state +は戻る時に VME フラグの状態が入ります。 .\" .It Dv VM86_SET_VME -.\" .It Dv VM86_GET_VME -.\" .It Dv VM86_INTCALL .El .Pp vm86 モードに入るには、vm86 用に正しく設定したマシンコンテキスト、そして .Dv PSL_VM ビットを設定して .Xr sigreturn 2 を呼び出します。 シグナルの配信時に制御がプロセスに戻ります。 .Sh 戻り値 .Rv -std i386_vm86 .Sh エラー .Fn i386_vm86 システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er EINVAL カーネルに vm86 サポートがないか、または無効な関数が指定されました。 .It Bq Er ENOMEM カーネルデータ構造体を初期化するのに十分なメモリがありません。 .El .Sh 作者 このマニュアルページは .An Jonathan Lemon -が作成しました。 +が書き、 +.An Bruce M Simpson +が更新しました。 diff --git a/ja_JP.eucJP/man/man2/stat.2 b/ja_JP.eucJP/man/man2/stat.2 index 6617fafded..c7abf3a7e6 100644 --- a/ja_JP.eucJP/man/man2/stat.2 +++ b/ja_JP.eucJP/man/man2/stat.2 @@ -1,275 +1,249 @@ .\" Copyright (c) 1980, 1991, 1993, 1994 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)stat.2 8.4 (Berkeley) 5/1/95 -.\" %FreeBSD: src/lib/libc/sys/stat.2,v 1.31 2002/12/19 09:40:25 ru Exp % +.\" %FreeBSD: src/lib/libc/sys/stat.2,v 1.32 2003/05/13 08:10:05 dougb Exp % .\" .\" $FreeBSD$ .Dd February 15, 2002 .Dt STAT 2 .Os .Sh 名称 .Nm stat , .Nm lstat , .Nm fstat .Nd ファイルステータスの取得 .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In sys/stat.h .Ft int .Fn stat "const char *path" "struct stat *sb" .Ft int .Fn lstat "const char *path" "struct stat *sb" .Ft int .Fn fstat "int fd" "struct stat *sb" .Sh 解説 .Fn stat システムコールは、 .Fa path が指すファイルの情報を取得します。 指定したファイルの読取り権、書込み権、実行権は必要ありません。 しかし、そのファイルへ至るパス名で列挙されたすべてのディレクトリは、 検索可能であることが必要です。 .Pp .Fn lstat 関数は .Fn stat に似ていますが、指定したファイルがシンボリックリンクである場合は異なります。 .Fn lstat はリンクの情報を戻しますが、 .Fn stat はリンクが参照するファイルの情報を返します。 .Pp .Fn fstat システムコールは、ファイル記述子 .Fa fd で区別されるオープンファイルについて、上と同じ情報を取得します。 .Pp 引数 .Fa sb は、構造体 .Vt stat へのポインタです。 これは、 .Aq Pa sys/stat.h -(下記参照) で定義され、ファイルに関する情報を保持します。 -.Bd -literal -struct stat { - dev_t st_dev; /* inode のデバイス */ - ino_t st_ino; /* inode 番号 */ - mode_t st_mode; /* inode 保護モード */ - nlink_t st_nlink; /* ハードリンク数 */ - uid_t st_uid; /* ファイル所有者のユーザ ID */ - gid_t st_gid; /* ファイルグループのグループ ID */ - dev_t st_rdev; /* デバイスタイプ */ -#ifndef _POSIX_SOURCE - struct timespec st_atimespec; /* 最後のアクセス時刻 */ - struct timespec st_mtimespec; /* 最後のデータ修正時刻 */ - struct timespec st_ctimespec; /* 最後のファイルステータス修正時刻 */ -#else - time_t st_atime; /* 最後のアクセス時刻 */ - long st_atimensec; /* 最後のアクセス時刻のナノ秒 */ - time_t st_mtime; /* 最後のデータ修正時刻 */ - long st_mtimensec; /* 最後のデータ修正時刻のナノ秒 */ - time_t st_ctime; /* 最後のファイルステータス修正時刻 */ - long st_ctimensec; /* 最後のファイルステータス修正時刻のナノ秒 */ -#endif - off_t st_size; /* バイト単位のファイルの大きさ */ - int64_t st_blocks; /* ファイルに割り当てられたブロック数 */ - u_int32_t st_blksize; /* 入出力に最適なブロックサイズ */ - fflags_t st_flags; /* ファイルに対するユーザ定義フラグ */ - u_int32_t st_gen; /* ファイル生成番号 */ -}; -.Ed +で定義され、ファイルに関する情報を保持します。 .Pp .Fa struct stat の時刻に関するフィールドは、以下のとおりです: .Bl -tag -width XXXst_mtime .It st_atime ファイルのデータが最後にアクセスされた時刻。 .Xr mknod 2 , .Xr utimes 2 , .Xr read 2 システムコールで変更されます。 .It st_mtime ファイルのデータが最後に修正された時刻。 .Xr mknod 2 , .Xr utimes 2 , .Xr write 2 システムコールで変更されます。 .It st_ctime ファイルステータスが最後に変更された時刻 (inode データの修正)。 .Xr chmod 2 , .Xr chown 2 , .Xr link 2 , .Xr mknod 2 , .Xr rename 2 , .Xr unlink 2 , .Xr utimes 2 , .Xr write 2 システムコールで変更されます。 +.It st_birthtime +inode が作成されたときの時刻。 .El .Pp .Dv _POSIX_SOURCE が定義されていない場合、時刻に関するフィールドは以下のように定義されます: .Bd -literal #ifndef _POSIX_SOURCE #define st_atime st_atimespec.tv_sec #define st_mtime st_mtimespec.tv_sec #define st_ctime st_ctimespec.tv_sec #endif .Ed .Pp .Vt "struct stat" のサイズに関するフィールドは、以下のとおりです: .Bl -tag -width XXXst_blksize .It st_blksize ファイルの最適な入出力ブロックサイズ。 .It st_blocks ファイルに 512 バイト単位で割り当てられたブロックの実際の数。 短いシンボリックリンクが inode に保持されている場合、この数値が 0 になることがあります。 .El .Pp ステータス情報ワード .Fa st_mode には、以下のようなビットがあります: .Bd -literal #define S_IFMT 0170000 /* ファイルのタイプ */ #define S_IFIFO 0010000 /* 名前付きパイプ (fifo) */ #define S_IFCHR 0020000 /* キャラクタ型特殊ファイル */ #define S_IFDIR 0040000 /* ディレクトリ */ #define S_IFBLK 0060000 /* ブロック型特殊ファイル */ #define S_IFREG 0100000 /* 通常 */ #define S_IFLNK 0120000 /* シンボリックリンク */ #define S_IFSOCK 0140000 /* ソケット */ #define S_IFWHT 0160000 /* ホワイトアウト */ #define S_ISUID 0004000 /* 実行時にユーザ ID を設定 */ #define S_ISGID 0002000 /* 実行時にグループ ID を設定 */ #define S_ISVTX 0001000 /* 使用後にもスワップされたテキストを保存 */ #define S_IRUSR 0000400 /* 読取り権限の所有者 */ #define S_IWUSR 0000200 /* 書込み権限の所有者 */ #define S_IXUSR 0000100 /* 実行 / 検索権限の所有者 */ .Ed アクセスモードのリストについては、 .Aq Pa sys/stat.h , .Xr access 2 , .Xr chmod 2 を参照してください。 .Sh 戻り値 .Rv -std .Sh 互換性 以前のバージョンのシステムでは、 .Li st_dev , .Li st_uid , .Li st_gid , .Li st_rdev , .Li st_size , .Li st_blksize , .Li st_blocks フィールドに別のタイプを使用していました。 .Sh エラー .Fn stat システムコールと .Fn lstat システムコールは、以下のような場合にエラーとなります: .Bl -tag -width Er .It Bq Er EACCES 指定されたパスには、検索が許可されていないディレクトリが含まれています。 .It Bq Er EFAULT .Fa sb 引数または .Em name 引数は、プロセスに割り当てられたアドレス空間の範囲外を指しています。 .It Bq Er EIO ファイルシステムでの読み書き中に入出力エラーが発生しました。 .It Bq Er ELOOP パス名を変換するときに検出されたシンボリックリンクが多すぎます。 .It Bq Er ENAMETOOLONG パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。 .It Bq Er ENOENT 指定されたファイルが存在しません。 .It Bq Er ENOTDIR パスの構成要素中にディレクトリ以外のものが含まれています。 .It Bq Er EOVERFLOW ファイルサイズのバイト数が、 .Fa sb で指されている構造体で正しく表現できません。 .El .Pp .Fn fstat システムコールは、以下のような場合にエラーとなります: .Bl -tag -width Er .It Bq Er EBADF .Fa fd 引数が、有効な記述子ではありません。 .It Bq Er EFAULT .Fa sb 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。 .It Bq Er EIO ファイルシステムに読み書きしている間に入出力エラーが発生しました。 .It Bq Er EOVERFLOW ファイルサイズのバイト数が、 .Fa sb で指されている構造体で正しく表現できません。 .El .Sh 関連項目 .Xr access 2 , .Xr chmod 2 , .Xr chown 2 , .Xr utimes 2 , .Xr symlink 7 .Sh バグ .Fn fstat をソケット (およびパイプ) に適用すると、ブロックサイズフィールド、 および固有デバイスと inode 番号以外に 0 の入ったバッファが戻されます。 .Sh 規格 .Fn stat システムコールと .Fn fstat システムコールは、 .St -p1003.1-90 に適合しています。 .Sh 歴史 .Fn stat システムコールと .Fn fstat システムコールは、 .At v7 で登場しました。 .Fn lstat システムコールは .Bx 4.2 で登場しました。 .\" Amended by N.Kumagai 2000-3-18 diff --git a/ja_JP.eucJP/man/man9/Makefile b/ja_JP.eucJP/man/man9/Makefile index a8671a2c2b..66f34d5416 100644 --- a/ja_JP.eucJP/man/man9/Makefile +++ b/ja_JP.eucJP/man/man9/Makefile @@ -1,254 +1,256 @@ # $FreeBSD$ MAN9 = BUS_PRINT_CHILD.9\ BUS_READ_IVAR.9\ BUS_SETUP_INTR.9\ DECLARE_MODULE.9\ DELAY.9\ DEVICE_ATTACH.9\ DEVICE_DETACH.9\ DEVICE_IDENTIFY.9\ DEVICE_PROBE.9\ DEVICE_SHUTDOWN.9\ DEV_MODULE.9\ DRIVER_MODULE.9\ KASSERT.9\ MD5.9\ MODULE_DEPEND.9\ MODULE_VERSION.9\ SYSCALL_MODULE.9\ VFS.9\ VFS_CHECKEXP.9\ VFS_FHTOVP.9\ VFS_INIT.9\ VFS_MOUNT.9\ VFS_QUOTACTL.9\ VFS_ROOT.9\ VFS_START.9\ VFS_STATFS.9\ VFS_SYNC.9\ VFS_UNMOUNT.9\ VFS_VGET.9\ VFS_VPTOFH.9\ VOP_ACCESS.9\ VOP_ACLCHECK.9\ VOP_ADVLOCK.9\ VOP_ATTRIB.9\ VOP_BWRITE.9\ VOP_CREATE.9\ VOP_FSYNC.9\ VOP_GETACL.9\ VOP_GETEXTATTR.9\ VOP_GETPAGES.9\ VOP_INACTIVE.9\ VOP_IOCTL.9\ VOP_LEASE.9\ VOP_LINK.9\ VOP_LOCK.9\ VOP_LOOKUP.9\ VOP_OPENCLOSE.9\ VOP_PATHCONF.9\ VOP_PRINT.9\ VOP_RDWR.9\ VOP_READDIR.9\ VOP_READLINK.9\ VOP_REALLOCBLKS.9\ VOP_REMOVE.9\ VOP_RENAME.9\ VOP_SETACL.9\ VOP_SETEXTATTR.9\ VOP_STRATEGY.9\ acl.9\ bios.9\ boot.9\ buf.9\ bus_alloc_resource.9\ bus_generic_attach.9\ bus_generic_detach.9\ bus_generic_print_child.9\ bus_generic_read_ivar.9\ bus_generic_shutdown.9\ bus_release_resource.9\ cd.9\ copy.9\ devclass.9\ devclass_add_driver.9\ devclass_find.9\ devclass_get_device.9\ devclass_get_devices.9\ devclass_get_maxunit.9\ devclass_get_name.9\ devclass_get_softc.9\ device.9\ device_add_child.9\ device_delete_child.9\ device_enable.9\ device_find_child.9\ device_get_children.9\ device_get_devclass.9\ device_get_driver.9\ device_get_ivars.9\ device_get_softc.9\ device_get_state.9\ device_get_unit.9\ device_probe_and_attach.9\ device_quiet.9\ device_set_desc.9\ device_set_flags.9\ devstat.9\ devtoname.9\ driver.9\ extattr.9\ fetch.9\ inittodr.9\ intro.9\ kernacc.9\ make_dev.9\ malloc.9\ mi_switch.9\ microseq.9\ microtime.9\ microuptime.9\ module.9\ panic.9\ physio.9\ psignal.9\ resettodr.9\ sbuf.9\ sleep.9\ spl.9\ store.9\ style.9\ suser.9\ sysctl_add_oid.9\ sysctl_ctx_init.9\ time.9\ timeout.9\ tvtohz.9\ uio.9\ vfs_unmountall.9\ vget.9\ vnode.9\ vput.9\ vref.9\ vrele.9\ vslock.9\ zone.9 MLINKS+=BUS_SETUP_INTR.9 bus_setup_intr.9 MLINKS+=BUS_SETUP_INTR.9 BUS_TEARDOWN_INTR.9 MLINKS+=BUS_SETUP_INTR.9 bus_teardown_intr.9 MLINKS+=DRIVER_MODULE.9 MULTI_DRIVER_MODULE.9 MLINKS+=MD5.9 MD5Init.9 MD5.9 MD5Transform.9 MLINKS+=VOP_ATTRIB.9 VOP_GETATTR.9 MLINKS+=VOP_ATTRIB.9 VOP_SETATTR.9 MLINKS+=VOP_CREATE.9 VOP_MKDIR.9 MLINKS+=VOP_CREATE.9 VOP_MKNOD.9 MLINKS+=VOP_CREATE.9 VOP_SYMLINK.9 MLINKS+=VOP_GETPAGES.9 VOP_PUTPAGES.9 MLINKS+=VOP_INACTIVE.9 VOP_RECLAIM.9 MLINKS+=VOP_LOCK.9 VOP_ISLOCKED.9 MLINKS+=VOP_LOCK.9 VOP_UNLOCK.9 MLINKS+=VOP_LOCK.9 vn_lock.9 MLINKS+=VOP_OPENCLOSE.9 VOP_CLOSE.9 MLINKS+=VOP_OPENCLOSE.9 VOP_OPEN.9 MLINKS+=VOP_RDWR.9 VOP_READ.9 MLINKS+=VOP_RDWR.9 VOP_WRITE.9 MLINKS+=VOP_REMOVE.9 VOP_RMDIR.9 MLINKS+=copy.9 copyin.9 copy.9 copyinstr.9 copy.9 copyout.9 copy.9 copystr.9 MLINKS+=devstat.9 devicestat.9 MLINKS+=devstat.9 devstat_add_entry.9 MLINKS+=devstat.9 devstat_remove_entry.9 MLINKS+=devstat.9 devstat_start_transaction.9 MLINKS+=devstat.9 devstat_end_transaction.9 MLINKS+=fetch.9 fubyte.9 fetch.9 fuswintr.9 fetch.9 fusword.9 fetch.9 fuword.9 #MLINKS+=ifnet.9 if_data.9 ifnet.9 ifaddr.9 ifnet.9 ifqueue.9 MLINKS+=kernacc.9 useracc.9 MLINKS+=make_dev.9 dev_depends.9 MLINKS+=make_dev.9 destroy_dev.9 MLINKS+=make_dev.9 make_dev_alias.9 MLINKS+=malloc.9 FREE.9 malloc.9 MALLOC.9 malloc.9 free.9 MLINKS+=malloc.9 realloc.9 malloc.9 reallocf.9 MLINKS+=mi_switch.9 cpu_switch.9 mi_switch.9 cpu_throw.9 MLINKS+=psignal.9 gsignal.9 MLINKS+=psignal.9 pgsignal.9 #MLINKS+=rtalloc.9 rtalloc1.9 rtalloc.9 rtalloc_ign.9 MLINKS+=sleep.9 tsleep.9 sleep.9 wakeup.9 sleep.9 wakeup_one.9 MLINKS+=sleep.9 msleep.9 MLINKS+=buf.9 bp.9 MLINKS+=spl.9 spl0.9 MLINKS+=spl.9 splbio.9 spl.9 splclock.9 spl.9 splhigh.9 spl.9 splimp.9 MLINKS+=spl.9 splnet.9 spl.9 splsoftclock.9 spl.9 splsofttty.9 MLINKS+=spl.9 splstatclock.9 spl.9 spltty.9 spl.9 splvm.9 spl.9 splx.9 MLINKS+=store.9 subyte.9 store.9 suswintr.9 store.9 susword.9 store.9 suword.9 MLINKS+=time.9 boottime.9 time.9 mono_time.9 time.9 runtime.9 MLINKS+=timeout.9 untimeout.9 MLINKS+=timeout.9 callout_handle_init.9 timeout.9 callout_init.9 MLINKS+=timeout.9 callout_stop.9 timeout.9 callout_reset.9 MLINKS+=uio.9 uiomove.9 MLINKS+=vref.9 VREF.9 MLINKS+=vslock.9 vsunlock.9 MLINKS+=device_add_child.9 device_add_child_ordered.9 MLINKS+=device_enable.9 device_disable.9 MLINKS+=device_enable.9 device_is_enabled.9 +MLINKS+=device_get_ivars.9 device_set_ivars.9 MLINKS+=device_get_state.9 device_busy.9 MLINKS+=device_get_state.9 device_unbusy.9 MLINKS+=device_get_state.9 device_is_alive.9 +MLINKS+=device_get_state.9 device_is_attached.9 MLINKS+=device_quiet.9 device_verbose.9 MLINKS+=device_quiet.9 device_is_quiet.9 MLINKS+=device_set_desc.9 device_get_desc.9 MLINKS+=device_set_desc.9 device_set_desc_copy.9 MLINKS+=device_set_flags.9 device_get_flags.9 MLINKS+=devclass_add_driver.9 devclass_delete_driver.9 MLINKS+=devclass_add_driver.9 devclass_find_driver.9 MLINKS+=BUS_READ_IVAR.9 BUS_WRITE_IVAR.9 MLINKS+=bus_generic_read_ivar.9 bus_generic_write_ivar.9 MLINKS+=microtime.9 getmicrotime.9 MLINKS+=microtime.9 nanotime.9 MLINKS+=microtime.9 getnanotime.9 MLINKS+=microuptime.9 getmicrouptime.9 MLINKS+=microuptime.9 nanouptime.9 MLINKS+=microuptime.9 getnanouptime.9 MLINKS+=suser.9 suser_cred.9 MLINKS+=sysctl_add_oid.9 sysctl_remove_oid.9 MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_OID.9 MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_NODE.9 MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_STRING.9 MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_INT.9 MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_UINT.9 MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_LONG.9 MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_ULONG.9 MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_OPAQUE.9 MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_STRUCT.9 MLINKS+=sysctl_add_oid.9 SYSCTL_ADD_PROC.9 MLINKS+=sysctl_ctx_init.9 sysctl_ctx_free.9 MLINKS+=sysctl_ctx_init.9 sysctl_ctx_entry_add.9 MLINKS+=sysctl_ctx_init.9 sysctl_ctx_entry_del.9 MLINKS+=sysctl_ctx_init.9 sysctl_ctx_entry_find.9 MLINKS+=sbuf.9 sbuf_new.9 MLINKS+=sbuf.9 sbuf_clear.9 MLINKS+=sbuf.9 sbuf_setpos.9 MLINKS+=sbuf.9 sbuf_cat.9 MLINKS+=sbuf.9 sbuf_cpy.9 MLINKS+=sbuf.9 sbuf_printf.9 MLINKS+=sbuf.9 sbuf_putc.9 MLINKS+=sbuf.9 sbuf_overflowed.9 MLINKS+=sbuf.9 sbuf_finish.9 MLINKS+=sbuf.9 sbuf_data.9 MLINKS+=sbuf.9 sbuf_len.9 MLINKS+=sbuf.9 sbuf_delete.9 MLINKS+=sbuf.9 sbuf_trim.9 MLINKS+=sbuf.9 sbuf_vprintf.9 MLINKS+=zone.9 uma.9 MLINKS+=zone.9 uma_zalloc.9 MLINKS+=zone.9 uma_zcreate.9 MLINKS+=zone.9 uma_zfree.9 MLINKS+=zone.9 uma_zdestroy.9 .include "bsd.prog.mk" diff --git a/ja_JP.eucJP/man/man9/device_get_ivars.9 b/ja_JP.eucJP/man/man9/device_get_ivars.9 index 5cc99733a8..cc6e3a5f60 100644 --- a/ja_JP.eucJP/man/man9/device_get_ivars.9 +++ b/ja_JP.eucJP/man/man9/device_get_ivars.9 @@ -1,50 +1,65 @@ .\" -*- nroff -*- .\" .\" Copyright (c) 1998 Doug Rabson .\" .\" All rights reserved. .\" .\" This program is free software. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" %FreeBSD: src/share/man/man9/device_get_ivars.9,v 1.6 2001/10/01 16:09:24 ru Exp % +.\" %FreeBSD: src/share/man/man9/device_get_ivars.9,v 1.7 2003/04/22 03:25:14 imp Exp % .\" .\" $FreeBSD$ .Dd June 16, 1998 .Dt DEVICE_GET_IVARS 9 .Os .Sh 名称 -.Nm device_get_ivars +.Nm device_get_ivars , +.Nm device_set_ivars .Nd バスの私的変数へのアクセス .Sh 書式 .In sys/param.h .In sys/bus.h .Ft void * .Fn device_get_ivars "device_t dev" +.Ft void +.Fn device_set_ivars "device_t dev" "void *ivar" .Sh 解説 -デバイスのバス固有のインスタンス変数を返します。 +.Pp +.Nm device_get_ivars +関数はデバイスのバス固有のインスタンス変数を返します。 +.Pp +.Nm device_set_ivars +関数はデバイスのバス固有のインスタンス変数を設定します。 +.Pp +一般に、バスドライバのみがこれらの関数を使用します。 +カーネルは、バスドライバはこのメモリを管理し、自動でのメモリの +割り当てと開放が発生しないということを、決めてかかります。 +代わりに、クライアントのドライバは +.Xr BUS_READ_IVAR 9 +インタフェースを通して ivars にアクセスするべきです。 .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 2dd7e31a34..6d0e1e3e1e 100644 --- a/ja_JP.eucJP/man/man9/device_get_state.9 +++ b/ja_JP.eucJP/man/man9/device_get_state.9 @@ -1,95 +1,103 @@ .\" -*- 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.9 2002/12/24 13:41:46 ru Exp % +.\" %FreeBSD: src/share/man/man9/device_get_state.9,v 1.10 2003/04/22 00:21:28 imp 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 +.Nm device_is_alive , +.Nm device_is_attached .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" +.Ft int +.Fn device_is_attached "device_t dev" .Sh 解説 デバイスの現在の状態は、 .Dv DS_NOTPRESENT , .Dv DS_ALIVE , .Dv DS_ATTACHED , .Dv DS_BUSY ( .Xr device 9 で説明されています) を返す .Fn device_get_state の呼び出しによってアクセスされます。 デバイスがうまくプローブされたことを確認するには、単純に状態が .Dv DS_ALIVE 以上であるかどうかを返す .Fn device_is_alive を呼び出します。 +デバイスがうまくアタッチされたことを確認するには、単純に状態が +.Dv DS_ATTACHED +以上であるかどうかを返す +.Fn device_is_attached +を呼び出します。 .Pp 個々のデバイスは、 .Fn device_busy が呼び出された時にインクリメントされ、 .Fn device_unbusy が呼び出された時にデクリメントされるビジーカウントを持っています。 どちらのルーチンもデバイスの状態が .Dv DS_ATTACHED より小さい場合にはエラーを返します。 .Pp デバイスが .Dv DS_ATTACHED 状態で .Fn device_busy が呼び出された時には、デバイスは .Dv DS_BUSY 状態に遷移します。 .Fn device_unbusy が呼び出されでデクリメントされた後にデバイスのビジーカウントが 0 ならば、 デバイスは .Dv DS_ATTACHED 状態に遷移します。 .Sh 関連項目 .Xr device 9 .Sh 作者 このマニュアルページは .An Doug Rabson が書きました。 diff --git a/ja_JP.eucJP/man/man9/malloc.9 b/ja_JP.eucJP/man/man9/malloc.9 index e2078f14c0..899e6da5b0 100644 --- a/ja_JP.eucJP/man/man9/malloc.9 +++ b/ja_JP.eucJP/man/man9/malloc.9 @@ -1,300 +1,301 @@ .\" 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.32 2003/04/10 10:18:56 harti Exp % +.\" %FreeBSD: src/share/man/man9/malloc.9,v 1.33 2003/05/06 19:10:17 hmp Exp % .\" $FreeBSD$ .\" .Dd April 9, 2003 .Dt MALLOC 9 .Os .Sh 名称 .Nm malloc , .Nm MALLOC , .Nm free , .Nm FREE , .Nm realloc , .Nm reallocf , .Nm MALLOC_DEFINE , .Nm MALLOC_DECLARE .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" .Fn MALLOC_DECLARE "type" .In sys/param.h .In sys/malloc.h .In sys/kernel.h .Fn MALLOC_DEFINE "type" "shortdesc" "longdesc" .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 を返すようにします。 割り込みコンテキストでの動作時には .Dv M_NOWAIT が要求されることに注意してください。 .It Dv M_WAITOK はリソースを待つことが OK であることを示します。 この要求がすぐに満たされることが出来ない場合には、現在のプロセスは、 他のプロセスのよってリソースが開放されることを待つために、 スリープ状態に置かれます。 .Dv M_WAITOK が指定されると .Fn malloc , .Fn realloc , .Fn reallocf 関数は .Dv NULL を返すことが出来ません。 .It Dv M_USE_RESERVE 要求されたメモリを獲得するために、 システムがリザーブ領域を使ってよいことを示します。 このオプションは以前は M_KERNEL と呼ばれていましたが、 より明示的に改名されました。 このオプションは軽視されていて、カーネルから徐々に削除されています。 そのため、新たなプログラミングでは使用されない様にするべきです。 .El .Pp 厳密に .Dv M_WAITOK または .Dv M_NOWAIT のどちらかが指定されなければなりません。 .Pp 引数 .Fa type はメモリの利用方法の統計をとるためと、 簡単なサニティチェックのために使われています。 +これは複数の割り当てを識別するために使用することが可能です。 この統計は .Sq vmstat -m で調べることが出来ます。 .Pp .Fa type は .Fn MALLOC_DECLARE と .Fn MALLOC_DEFINE マクロを通じて .Va struct 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 .Pp .Fn MALLOC_DEFINE を使用するためには、 .Aq sys/param.h .Aq ( sys/types.h の代わりに) および .Aq sys/kernel.h をインクルードしなければなりません。 .Sh 戻り値 .Fn malloc , .Fn realloc , .Fn reallocf 関数はすべてのタイプのオブジェクトの格納に適切なように整列された カーネル仮想アドレスを返すか、 または要求が満足できず (すなわち .Dv M_NOWAIT がセットされていることを意味します) に .Dv NULL を返します。 .Sh 実装に関する注 1 ページまでの要求に対し、 メモリアロケータは、2 の累乗の大きさの量を割り当てます。 より大きな要求に対しては、1 個以上のページが割り当てられます。 この動作に依存してはなりませんが、 この情報がメモリ使用効率の最適化に有用かもしれません。 .Pp プログラマは malloc フラグの .Dv M_NOWAIT および .Dv M_WAITOK と、 .Xr mbuf 9 フラグの .Dv M_DONTWAIT および .Dv M_TRYWAIT を混乱しないように注意するべきです。 .Sh ロックすることの考慮 .Fn malloc , .Fn realloc および .Fn reallocf は高速割り込みハンドラから呼び出されることは出来ません。 スレッド化された割り込みから呼び出される時には、 .Ar flag は .Dv M_NOWAIT を含んでいなければなりません。 .Pp ジャイアントロックではなく mutex が保持されている間は、 .Fn malloc , .Fn realloc および .Fn reallocf は .Dv M_WAITOK 付きで呼び出されてはなりません。 .Fn free が呼び出される時には、ジャイアントロックが保持されていても 保持されていなくても構いません。 .Pp .Xr vnode 9 インタロックを保持している時の .Fn malloc .Dv ( M_NOWAIT 付であっても) または .Fn free への全ての呼出しは、VM オブジェクトと vnode の相互獲得のために、 LOR (ロック順序の逆転) を引き起こします。 .Sh 関連項目 .Xr vmstat 8 , .Xr vnode 9 .Sh 診断 .Dv INVARIANTS コンフィギュレーションオプションを付けてコンパイルされたカーネルは、 割り当てられた領域以外への書き込みや .Fn malloc 関数と .Fn free 関数の不均衡な呼び出しなどにより生じたメモリ不正の検出を試みます。 一貫性チェックの失敗はパニックまたはシステムコンソールメッセージを出力します。 diff --git a/ja_JP.eucJP/man/man9/style.9 b/ja_JP.eucJP/man/man9/style.9 index 9fa448a6ca..1f1ab8f637 100644 --- a/ja_JP.eucJP/man/man9/style.9 +++ b/ja_JP.eucJP/man/man9/style.9 @@ -1,787 +1,788 @@ .\" 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.100 2003/03/25 19:46:55 jhb Exp % +.\" %FreeBSD: src/share/man/man9/style.9,v 1.101 2003/04/26 15:37:39 trhodes 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.100 2003/03/25 19:46:55 jhb Exp $ */ /* * とても重要な 1 行のコメントはこのようにします。 */ /* 殆どの 1 行のコメントはこのようにします。 */ /* * 複数行にわたるコメントはこのようにします。実際の文章を書きます。実際の * 段落に見えるように埋めていきます。 */ .Ed .Pp 著作権ヘッダの後には空行を 1 行入れ、ソースファイルには .Va rcsid を付けます。 バージョン管理システムの ID タグは、ファイル中に 1 個のみあるべきです (このファイルでは違いますが)。 C/C++ ソースファイル以外はこの例に従いますが、 C/C++ ソースファイルは以降の例に従います。 外部から入手したファイルの すべての VCS (バージョン管理システム) リビジョン識別子は、 存在すれば維持します。 これには、ファイルの来歴を示す複数の ID も含みます。 一般的に、外来の ID またはその下部構造は編集しません。 さもなければ .Dq Li ( "#if defined(LIBC_SCCS)" のように) 囲まれていない場合には、全ての互換性のない小片を隠すため、および その ID をオブジェクトファイルから追い出しておくために、両方を .Dq Li "#if 0 ... #endif" の中に囲みます。 ファイルの名前が変更された場合には、外来の VCS ID の前に .Dq Li "From: " のみを追加します。 .Bd -literal #if 0 #ifndef lint static char sccsid[] = "@(#)style 1.14 (Berkeley) 4/28/95"; #endif /* not lint */ #endif #include -__FBSDID("$\&FreeBSD: src/share/man/man9/style.9,v 1.98 2002/12/27 12:15:34 schweikh Exp $"); +__FBSDID("$\&FreeBSD: src/share/man/man9/style.9,v 1.101 2003/04/26 15:37:39 trhodes 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 +.Xr warn 3 , +.Xr style.Makefile 5 .Sh 歴史 このページは .Bx 4.4 Lite2 リリースの .Pa src/admin/style/style ファイルに大きく基づいていて、 現在の実装と .Fx プロジェクトの要望を反映して、頻繁に更新しています。