doc/ja_JP.eucJP/man/man2/intro.2
Kazuo Horikawa 8f404f43bb 3.4-RELEASE based section 2 w/o Makefile
Submitted by: jpman Project <man-jp@jp.FreeBSD.org>
2001-01-28 15:56:14 +00:00

782 lines
28 KiB
Groff

.\" Copyright (c) 1980, 1983, 1986, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)intro.2 8.5 (Berkeley) 2/27/95
.\"
.Dd February 27, 1995
.Dt INTRO 2
.Os BSD 4
.Sh 名称
.Nm intro
.Nd システムコールとエラー番号の紹介
.Sh 書式
.Fd #include <errno.h>
.Sh 解説
このセクションでは、システム
コール、エラー戻り、その他の共通な定義およびコンセプト
の概要について説明します。
.\".Pp
.\".Sy System call restart
.\".Pp
.\"<more later...>
.Sh 戻り値
ほとんどすべてのシステムコールが外部識別子 errno
によって参照されるエラー番号を備えています。
.Aq Pa sys/errno.h
内でこの識別子は次のように定義されています。
.Pp
.Dl extern int * __error();
.Dl #define errno (* __error())
.Pp
.Va __error()
関数は、初期スレッド以外のスレッドについてスレッドに固有な構造体の
フィールドを指すポインタを返します。初期スレッドと非スレッド
プロセスの場合、
.Va __error()
は、以前の定義と互換性のあるグローバル変数
.Va errno
を指すポインタを返します。
.Pp
システムコールは、エラーを検出すると、障害を示す整数値 (通常は -1)
を返し、それに応じて変数
.Va errno
を設定します。
<これによって -1 を受け取ったときの障害の解釈と、
それに応じた行動をとることを可能にします。>
呼び出しが正常に完了した場合は
.Va errno
が設定されることはありません。
いったん設定されると、別のエラーが起きるまでそのままです。
これはエラーの後でだけ調べるべきです。
多くのシステムコールが
これらのエラー番号の意味を過重にしており、
意味は呼び出しのタイプと状況に従って解釈する必要があることに注意してください。
.Pp
以降に示すのはエラーの完全なリストであり、これらの名前は
.Aq Pa sys/errno.h
に記載されています。
.Bl -hang -width Ds
.It Er 0 Em "Error 0"
未使用。
.It Er 1 EPERM Em "Operation not permitted"
「操作が許されません」
適当な特権のあるプロセス、またはファイルか他のリソースの所有者に
限定された操作を実行しようとしました。
.It Er 2 ENOENT Em "No such file or directory"
「そのようなファイルまたはディレクトリはありません」
指定のパス名の構成要素が存在しないか、
またはパス名が空の文字列でした。
.It Er 3 ESRCH Em "No such process"
「そのようなプロセスがありません」
指定のプロセス ID に対応するプロセスが見つかりませんでした。
.It Er 4 EINTR Em "Interrupted function call"
「関数呼び出しが割り込まれました」
割り込み可能な関数の実行中に、
非同期シグナル (たとえば、
.Dv SIGINT
または
.Dv SIGQUIT )
がプロセスによって捕らえられました。
シグナルハンドラが正常に戻ると、
割り込みされた関数呼び出しがエラー状態を返したように見えます。
.It Er 5 EIO Em "Input/output error"
「入出力エラーです」
何らかの物理的な入力エラーまたは出力エラーが起きました。
このエラーは、
同じファイル記述子への後続の操作まで報告されず、後続のエラーによって失われる
(上書きされる) 可能性があります。
.It Er 6 ENXIO Em "\&No such device or address"
「そのようなデバイスまたはアドレスがありません」
存在しないデバイスを参照している特殊ファイルへの入出力が行なわれたか、
またはデバイスの制限を越えた要求が行われました。
このエラーは、
たとえばテープドライブがオンラインでないか、またはディスク
パックがドライブにロードされていない
ときにも発生する可能性があります。
.It Er 7 E2BIG Em "Arg list too long"
「引数のリストが長すぎます」
新しいプロセスの引数と環境変数のリストに使用される
バイト数が、
現在の限界である
65536 バイト
.Pf ( Aq Pa sys/param.h
内の
.Dv NCARGS )
を越えました。
.It Er 8 ENOEXEC Em "Exec format error"
「実行形式エラーです」
実行を要求されたファイルは、適切なパーミッションでしたが、
実行可能ファイルについて要求される形式ではありませんでした。
.It Er 9 EBADF Em "Bad file descripter"
「ファイル記述子が不良です」
ファイル記述子引数が範囲外であったか、
開いていないファイルを参照していたか、
または書き込み (読み取り) 専用に開かれたファイルに
読み取り (書き込み) 要求が行われました。
.It Er 10 ECHILD Em "\&No child processes"
「子プロセスがありません」
.Xr wait 2
または
.Xr waitpid 2
関数が、
子プロセスが存在しないか、待機されたことのない子プロセスを持たない
プロセスによって実行されました。
.It Er 11 EDEADLK Em "Resource deadlock avoided"
「リソースデッドロックが回避されました」
デッドロック状況になる可能性のあるシステムリソースをロックしようとしました。
.It Er 12 ENOMEM Em "Cannot allocate memory"
「メモリの割り当てができません」
新しいプロセス
イメージが、ハードウェアまたはシステムが課する
メモリ管理制約によって許容されるより多くのメモリを要求しました。
スワップ空間の不足は通常、一時的です。
しかし、コアの不足は一時的ではありません。ソフト限界を
対応するハード限界まで増加させることはできます。
.It Er 13 EACCES Em "Permission denied"
「パーミッションが拒絶されました」
ファイルアクセスパーミッションで禁止されている方法で
ファイルにアクセスしようとしました。
.It Er 14 EFAULT Em "Bad address"
「不正なアドレスです」
呼び出しの引数を使おうとしているときに、
システムが無効なアドレスを検出しました。
.It Er 15 ENOTBLK Em "Not a block device"
「ブロックデバイスではありません」
ブロックデバイス操作が、非ブロックデバイスまたはファイル
について試みられました。
.It Er 16 EBUSY Em "Resource busy"
「リソースがビジー状態です」
その時点で使用されているシステムリソースを、
その要求と干渉するであろう方法で使おうとしました。
.It Er 17 EEXIST Em "File exists"
「ファイルが存在します」
既存のファイルが不適切なコンテキストで
記述されました。たとえば、
.Xr link 2
関数内の新しいリンク名としてです。
.It 18 Er EXDEV Em "Improper link"
「不適切なリンクです」
別のファイルシステム上のファイルへのハード
リンクが試みられました。
.It Er 19 ENODEV Em "Operation not supported"
「操作がデバイスによってサポートされていません」
不適切な関数をデバイスに適用しようとする
試みが行われました。たとえば、プリンタのような
書き込み専用デバイスを読み込もうとしました。
.It Er 20 ENOTDIR Em "Not a directory"
「ディレクトリではありません」
指定のパス名の構成要素が存在しましたが、
ディレクトリである必要があるのに、
それがディレクトリではありませんでした。
.It Er 21 EISDIR Em "Is a directory"
「ディレクトリです」
書き込みモードを指定してディレクトリを開こうとしました。
.It Er 22 EINVAL Em "Invalid argument"
「無効な引数です」
無効な引数が指定されました (たとえば、
.Xr signal 3
関数または
.Xr kill 2
関数に未定義のシグナルを指定する場合)。
.It Er 23 ENFILE Em "Too many open files in system"
「システム内で開かれているファイルが多すぎます」
システム上で許容できるファイル記述子の
最大数に到達しており、少なくとも
1 つが閉じられるまで、開こうとしている要求は満たされません。
.It Er 24 EMFILE Em "Too many open files"
「開いているファイルが多すぎます」
<現在のリリースでは、
プロセス1個につき開いているファイル数の上限は 64 です。>
.Xr getdtablesize 2
で現在の限界を取得できます。
.It Er 25 ENOTTY Em "Inappropriate ioctl for device"
「デバイスに不適切な ioctl です」
ファイルまたは特殊デバイスについて制御関数 (
.Xr ioctl 2
を参照) が試みられましたが、操作が不適切でした。
.It Er 26 ETXTBSY Em "Text file busy"
「テキストファイルがビジーです」
新しいプロセスが、別のプロセスによって書き込み用に開かれた純粋な手続き
(共有テキスト)
ファイルであったか、または純粋手続きファイルが実行されている間に、
.Xr open 2
呼び出しが書き込みアクセスを要求しました。
.It Er 27 EFBIG Em "File too large"
「ファイルが大きすぎます」
ファイルのサイズが最大値を超過しました
(約
.if t 2\u\s-231\s+2\d
.if n 2.1E9
バイト)。
.It Er 28 ENOSPC Em "Device out of space"
「デバイスが空間不足です」
該当するファイルシステムで
それ以上のディスクブロックが利用できないために、
通常ファイルへの
.Xr write 2
、ディレクトリまたはシンボリックリンクの作成、
ディレクトリエントリの作成が失敗しました。
または、
該当するファイルシステムで
それ以上の inode が利用できないために、
新しく作成されたファイルについての
inode の割り当てが失敗しました。
.It Er 29 ESPIPE Em "Illegal seek"
「不正なシークです」
.Xr lseek 2
関数がソケット、パイプ、または
.Tn FIFO
について実行されました。
.It Er 30 EROFS Em "Read-only file system"
「読み取り専用ファイルシステムです」
ファイルまたはディレクトリを
修正しようとする試みが、その時点で
読み取り専用のファイルシステムについて行われました。
.It Er 31 EMLINK Em "Too many links"
「リンクが多すぎます」
1 つのファイルへの許容される最大ハードリンクを超過しました
(ファイルごとのハードリンクの限界は 32767 です)。
.It Er 32 EPIPE Em "Broken pipe"
「パイプが破壊されてました」
データを読み取るプロセスのない
パイプ、ソケット、または
.Tn FIFO
に対しての書き込みです。
.It Er 33 EDOM Em "Numerical argument out of domain"
「数値引数が領域外です」
数値入力引数が、数学関数の定義域の外側にありました。
.It Er 34 ERANGE Em "Numerical result out of range"
「数値結果が範囲外です」
関数の数値結果が大きすぎて、利用できる場所に入りません
(おそらく精度を超過したのでしょう)。
.It Er 35 EAGAIN Em "Resource temporary unavailable"
「リソースが一時的に利用できません」
これは一時的な状況であり、後で同じルーチンを呼び出した時に
正常に完了する可能性があります。
.It Er 36 EINPROGRESS Em "Operation now in progress"
「操作が現在進行中です」
完了するのに時間のかかる操作 (
.Xr connect 2
など) がノンブロッキングオブジェクトについて試みられました (
.Xr fcntl 2
を参照)。
.It Er 37 EALREADY Em "Operation already in progress"
「操作は既に進行中です」
既に操作が進行中のノンブロッキング
オブジェクトについて操作が試みられた。
.It Er 38 ENOTSOCK Em "Socket operation on non-socket"
「ソケットでないものについてソケット操作を行ないました」
自明です。
.It Er 39 EDESTADDRREQ Em "Destination address required"
「宛先アドレスが要求されています」
ソケット上の操作で必要なアドレスが抜けています。
.It Er 40 EMSGSIZE Em "Message too long"
「メッセージが長すぎます」
ソケット上で送信されたメッセージが、
内部メッセージバッファまたは何らかの
他のネットワーク制限より大きくなりました。
.It Er 41 EPROTOTYPE Em "Protocol wrong type for socket"
「ソケットに対する間違ったタイプのプロトコルです」
要求されたソケットタイプをサポート
しないプロトコルが指定されました。たとえば、タイプ
.Dv SOCK_STREAM
では、
.Tn ARPA
インターネット
.Tn UDP
プロトコルを使用できません。
.It Er 42 ENOPROTOOPT Em "Protocol not available"
「プロトコルが利用できません」
.Xr getsockopt 2
呼び出しまたは
.Xr setsockopt 2
呼び出しで、
間違ったオプションまたはレベルが指定されました。
.It Er 43 EPROTONOSUPPORT Em "Protocol not supported"
「プロトコルがサポートされていません」
プロトコルがシステム内に構成されていないか、
またはプロトコルについての実装が存在しません。
.It Er 44 ESOCKTNOSUPPORT Em "Socket type not supported"
「ソケットタイプがサポートされていません」
ソケットタイプのサポートがシステム内に
構成されていないか、またはそれの実装が存在しません。
.It Er 45 EOPNOTSUPP Em "Operation not supported"
「操作がサポートされていません」
試みられた操作が、
参照されたオブジェクトのタイプについてサポートされていません。
通常、これが起きるのは、ファイル記述子が
この操作をサポートできないファイルまたは
ソケットを参照するときです。たとえば、データグラム
ソケット上で接続を
.Em accept
しようしたときです。
.It Er 46 EPFNOSUPPORT Em "Protocol family not supported"
「プロトコルファミリがサポートされていません」
プロトコルファミリがシステム内に構成されていないか、
またはそれの実装が存在していません。
.It Er 47 EAFNOSUPPORT Em "Address family not supported by protocol family"
「アドレスファミリがプロトコルファミリによってサポートされていません」
要求されたプロトコルと互換性のないアドレスが使用されました。たとえば、
.Tn ARPA
インターネット
プロトコルで
.Tn NS
アドレスを使用できるとは必ずしも期待すべきではないでしょう。
.It Er 48 EADDRINUSE Em "Address already in use"
「アドレスが既に使用中です」
各アドレス毎に、利用は 1 つだけが通常許容されます。
.It Er 49 EADDRNOTAVAIL Em "Cannot assing requested address"
「要求されたアドレスを割り当てできません」
通常は、このマシン上にないアドレスで
ソケットを作成しようとした結果です。
.It Er 50 ENETDOWN Em "Network is down"
「ネットワークがダウンしています」
ソケット操作で動いていないネットワークに遭遇しました。
.It Er 51 ENETUNREACH Em "Network is unreachable"
「ネットワークに到達できません」
ソケット操作が到達できないネットワークに試みられました。
.It Er 52 ENETRESET Em "Network dropped connection on reset"
「ネットワークのリセット時に接続が廃棄されました」
接続されていたホストがクラッシュして再起動されました。
.It Er 53 ECONNABORTED Em "Software caused connection abort"
「ソフトウェアが接続中止を引き起こしました」
接続中止がホストマシンに内部的に発生しました。
.It Er 54 ECONNRESET Em "Connection reset by peer"
「接続が対等な相手によってリセットされました」
接続が対等な相手 (peer) によって強制的に閉じられました。
これは時間切れまたは再起動によって、
リモート側のソケットで接続が失われた結果であるのが普通です。
.It Er 55 ENOBUFS Em "\&No buffer space available"
「バッファ空間の空きがありません」
システムに十分なバッファ空間がないか、待ち行列が一杯になったために、
ソケットまたはパイプについての操作が行われませんでした。
.It Er 56 EISCONN Em "Socket is already connected"
「ソケットは既に接続されています」
既に接続されたソケットについて
.Xr connect 2
要求が行なわれました。
または、接続済みのソケットに関する
.Xr sendto 2
.Xr sendmsg 2
要求で、既に接続されているのに宛先を指定しました。
.It Er 57 ENOTCONN Em "Socket is not connected"
「ソケットは接続されていません」
ソケットが接続されておらず、
しかも (データグラムソケットを送信するときに)
アドレスが指定されていなかったために、データを送信または
受信する要求が許可されませんでした。
.It Er 58 ESHUTDOWN Em "Cannot send after socket shutdown"
「ソケットのシャットダウンの後で送信ができません」
ソケットが以前の
.Xr shutdown 2
呼び出しで既にシャットダウンさせられているために、
データを送信する要求が許可されませんでした。
.It Er 60 ETIMEDOUT Em "Operation timed out"
「操作がタイムアウトしました」
ある時間間隔の後、接続された一方が適切に応答しなかったために、
.Xr connect 2
要求または
.Xr send 2
要求が処理に失敗しました
(タイムアウトの期間は通信プロトコルに左右されます)。
.It Er 61 ECONNREFUSED Em "Connection refused"
「接続が拒絶されました」
ターゲットマシンが明示的に接続を拒絶したので、
接続を確立できませんでした。これは、通常、外部のホストで
有効でないサービスに接続しようとした結果です。
.It Er 62 ELOOP Em "Too many levels of symbolic links"
「シンボリックリンクのレベルが多すぎます」
パス名の探索に、32
.Pq Dv MAXSYMLINKS
を越えるシンボリックリンクが含まれていました。
.It Er 63 ENAMETOOLONG Em "File name too long"
「ファイル名が長すぎます」
パス名の構成要素が 255
.Pq Dv MAXNAMELEN
文字を越えているか、またはパス名全体が 1023
.Pq Dv MAXPATHLEN Ns -1
文字を越えています。
.It Er 64 EHOSTDOWN Em "Host is down"
「ホストがダウンしています」
宛先ホストがダウンしているために
ソケット操作が処理失敗しました。
.It Er 65 EHOSTUNREACH Em "No route to host"
「ホストへの経路はありません」
到達不可能なホストにソケット操作をしようとしました。
.It Er 66 ENOTEMPTY Em "Directory not empty"
「ディレクトリが空ではありません」
.Ql \&.
.Ql \&..
以外を含むディレクトリの
ディレクトリ削除または名前変更の呼び出しに
指定されました。
.It Er 67 EPROCLIM Em "Too many processes"
「プロセスが多すぎます」
.It Er 68 EUSERS Em "Too many users"
「ユーザが多すぎます」
クォータシステムでテーブルエントリが不足しました。
.It Er 69 EDQUOT Em "Disc quota exceeded"
「ディスククォータが超過しました」
ディスクブロックのユーザのクォータを使い尽くしたために、
通常のファイルへの
.Xr write 2
、ディレクトリまたはシンボリックリンクの作成、
またはディレクトリエントリの作成が失敗しました。
もしくは、inode のユーザのクォータを使い尽くしたために、
新しく作成されたファイルのための
inode の割り当てに失敗しました。
.ne 1i
.It Er 70 ESTALE Em "Stale NFS file handle"
「腐りかけた NFS ファイルハンドルです」
オープンされている (
.Tn NFS
ファイルシステム上の ) ファイルに対してアクセスしようとしましたが、
指定したファイル記述子が参照するファイルは現在利用できません。
これは
.Tn NFS
サーバ上でファイルが削除されたか、
または他の破壊的なイベントが起きたことを示していると思われます。
.It Er 72 EBADRPC Em "RPC struct is bad"
「RPC 構造体が不良です」
.Tn RPC
情報の交換が不成功でした。
.It Er 73 ERPCMISMATCH Em "RPC varsion wrong"
「RPC バージョンが間違っています」
遠隔の相手の
.Tn RPC
のバージョンが、こちらのバージョンと
互換性がありません。
.It Er 74 EPROGUNAVAIL Em "RPC prog. not avail"
「RPC プログラムが利用できません」
要求されたプログラムが
リモートホストに登録されていません。
.It Er 75 EPROGMISMATCH Em "Program version wrong"
「プログラムバージョンが間違っています」
プログラムの要求したバージョンが、リモートホスト
.Pq Tn RPC
上で利用できません。
.It Er 76 EPROCUNAVAIL Em "Bad procedure for program"
「プログラムにとって間違った手続きです」
リモートプログラム内に存在しない手続きについて
.Tn RPC
呼び出しが試みられました。
.It Er 77 ENOLCK Em "No locks available"
「ロックが利用できません」
システムが課した、同時ファイルロック数の制限に達しました。
.It Er 78 ENOSYS Em "Function not implemented"
「関数が実装されていません」
このシステムで利用できないシステムコールをしようとしました。
.Sh 定義
.Bl -tag -width Ds
.It "プロセス ID (Process ID)"
システム内のアクティブな各プロセスは、プロセス ID
と呼ばれる負でない整数によって一意に識別されます。この ID
の範囲は 0 から 99999 までです。
.It "親プロセス ID (Parent process ID)"
新しいプロセスは、現在のアクティブなプロセスから作成されます (
.Xr fork 2
を参照)。
プロセスの親プロセス ID は、
最初はそれを作成したプロセスのプロセス ID となっています。
そのプロセスを作成したプロセスが exit した場合、
それぞれの子プロセスの親プロセス ID は、システムプロセス
.Xr init 8
の ID に設定されます。
.It "プロセスグループ (Process Group)"
アクティブなプロセスはそれぞれがプロセスグループのメンバであり、
プロセスグループはプロセスグループ ID と呼ばれる
負でない整数によって識別されます。
プロセスグループ ID はそのグループのリーダーのプロセス ID です。
このグループ化によって、
関連づけられたプロセスの集団にシグナルを送る (
.Xr termios 4
を参照) ことや、
.Xr csh 1
のジョブ制御機構を可能にします。
.It "セッション (Session)"
セッションは 1 つまたは複数のプロセスグループのセットです。
セッションは
.Xr setsid 2
の呼び出しが成功すると作成されます。これによって、
呼び出したプロセスは、新規のセッションにおける、
ただ一つしかないプロセスグループのただ一つのメンバになります。
.It "セッションリーダ (Session leader)"
.Xr setsid 2
の呼び出しの成功によって、新しいセッションを作成したプロセスは、
セッションリーダーとして知られます。セッション
リーダーだけが、端末を制御端末 (
.Xr termios 4
を参照) として取得できます 。
.It "制御プロセス (Controlling process)"
制御端末を持つセッションリーダーが制御プロセスです。
.It "制御端末 (Controlling terminal)"
セッションに関連づけられている端末は、そのセッションとそのメンバに対する
制御端末として知られます。
.ne 1i
.It "端末プロセスグループ ID (Terminal Process Group ID)"
端末は、セッションリーダーによって制御端末として取得されます。
一旦、端末がセッションに関連づけられると、
そのセッション内のどのプロセスグループをも、
端末プロセスグループ ID をプロセスグループの ID に設定することによって、
フォアグラウンドに配置できるようになります。
この機能は、同じ端末について競合する複数のジョブの間で
調停を行なうために用いられます (
.Xr csh 1
.Xr tty 4
を参照)。
.It "孤児になったプロセスグループ (Orphaned Process Group)"
プロセスグループは、ジョブ制御を行なうシェルの制御下にない場合、
孤児になったとみなされます。
もっと正確に言うと、
そのグループと同じセッションに属しているがプロセスグループは異なる、
というような親プロセスを、
プロセスグループのメンバのどれもが持たないような場合、
そのプロセスグループは孤児になります。
なお、プロセスが終了するとき、その子プロセスの親プロセスは
.Xr init 8
となるように変更されます。そしてこれは別個のセッションになります。
孤児になったプロセスグループのメンバの全てが、必ずしも
孤児になったプロセス (プロセスを作成したプロセスが終了した)
というわけではありません。
セッションリーダーのプロセスグループは定義によって孤児になります。
.It "実ユーザ ID と実グループID (Real User ID and Real Group ID) "
システム上の各ユーザは、実ユーザ ID と呼ばれる
正の整数によって識別されます。
.Pp
各ユーザは、1 つまたは複数のグループのメンバでもあります。
これらのグループの 1 つは他のものから
区別され、アカウンティング機能を実現するのに使用されます。
この区別されたグループに対応する正の整数は、実グループ ID と
呼ばれます。
.Pp
すべてのプロセスは実ユーザ ID と実グループ ID を持っています。
これらは、そのプロセスを作成したプロセスの
同等の属性から初期化されます。
.It "実効ユーザ ID、実効グループ ID、グループアクセスリスト (Effective User Id, Effective Group Id, and Group Access List)"
システムリソースへのアクセスは、
実効ユーザ ID とグループアクセスリストという
2 つの値を使って決定されます。
グループアクセスリストの最初のメンバは、実効グループ ID
としても知られています
(POSIX.1 では、グループアクセスリストは、補助グループ ID の
セットとして知られ、実効グループ ID がリストのメンバで
あるかどうかを指定しません)。
.Pp
実効ユーザ ID と実効グループ ID は、最初は
それぞれ、プロセスの実ユーザ ID と実グループ ID です。
いずれも (おそらくその先祖の 1 つによる) set-user-ID ファイルまたは
set-group-ID ファイルを実行を通じて変更することができます (
.Xr execve 2
を参照してください)。
慣習で、実効グループ ID
(グループアクセスリストの最初のメンバ) は複製されるので、
set-group-ID プログラムの実行の結果、もともと持っていた
(実) グループ ID が失われることはありません。
.Pp
グループアクセスリストは、リソースへのアクセス可能性を決定する
ためにだけ使用されるグループ ID のセットです。
アクセスチェックは、以降の
``ファイルアクセスパーミッション''
で説明するように行われます。
.It "保存されたセットユーザ ID と保存されたセットグループ ID (Saved Set User ID and Saved Set Group ID)"
プロセスが新しいファイルを実行するとき、
ファイルが set-user-ID であれば、
実効ユーザ ID はそのファイルの所有者に設定され、
ファイルが set-group-ID であれば、
実効グループ ID (グループアクセスリストの最初の要素) は
ファイルのグループに設定されます。
それからプロセスの実効ユーザ ID は saved set-user-ID として記録され、
プロセスの実効ユーザ ID は saved set-group-ID として記録されます。
これらの記録された値は、実 ID (
.Xr setuid 2
を参照) に戻った後で、実効ユーザ ID または実効グループ ID をこれらの
値に回復するために利用できます。
(POSIX.1 では saved set-user-ID と saved set-group-ID はオプションであり、
setuid および setgid の内部で使用されますが、
これはスーパーユーザについて意図どおりには機能しません)。
.It "スーパーユーザ (super-user)"
実効ユーザ ID が 0 の場合、そのプロセスは
.Em スーパーユーザ
プロセスとして認識され、特別な権利が認められます。
.ne 1i
.It "特殊プロセス (Special Processes)"
プロセス ID が 0, 1, 2 のプロセスは特殊です。
プロセス 0 はスケジューラです。
プロセス 1 は初期化プロセス
.Xr init 8
であり、システム内の他の各プロセスの祖先です。
これはプロセス構造を制御するために使用されます。
プロセス 2 はページングデーモンです。
.It "記述子 (Descriptor)"
.Xr open 2 ,
.Xr dup 2
によってファイルが参照されるとき、または
.Xr pipe 2 ,
.Xr socket 2 ,
.Xr socketpair 2
によってソケットが作成されるときに
システムによって割り当てられる整数です。
この整数は、
指定のプロセスやその子プロセスから、
そのファイルやソケットへのアクセスパスを一意に識別します。
.It "ファイル名 (File Name)"
最高 255
.Pq Dv MAXNAMELEN
文字で構成される名前であって、通常ファイル、特殊ファイル、
ディレクトリに名前を付けるのに使用されます。
.Pp
これらの文字は、0 (NUL) および
.Ql \&/
(スラッシュ) の
.Tn ASCII
コードを除きすべての
.Tn ASCII
文字のセットから選択できます。
.Pp
なお、ファイル名の一部として
.Ql \&* ,
.Ql \&? ,
.Ql \&[ ,
.Ql \&]
を使用するのは一般に賢明ではありません。シェルによって
これらの文字には特殊な意味がつけられるからです。
.It "パス名 (Path Name)"
パス名は、
.Tn NUL
で終端された文字列です。
オプショナルなスラッシュ
.Ql \&/
で開始し、スラッシュで区切られたゼロ個以上のディレクトリ名が続き、
オプションでファイル名が続きます。パス名の長さの合計は 1024
.Pq Dv MAXPATHLEN
文字未満である必要があります。
.Pp
パス名がスラッシュで開始する場合、パス検索はルートディレクトリから
始まります。そうでない場合、検索は現在の作業ディレクトリから始まります。
スラッシュそれ自体はルートディレクトリを指定します。
空のパス名は現在のディレクトリを指します。
.It "ディレクトリ (Directory)"
ディレクトリは特殊なタイプのファイルであり、他のファイルを参照する
エントリが含まれています。ディレクトリエントリはリンクと呼ばれます。
慣習で、ディレクトリには少なくとも 2 つのリンク、
.Ql \&.
.Ql \&..
が含まれています。これらはそれぞれ
.Em ドット
および
.Em ドット-ドット
と呼ばれます。ドットは、そのディレクトリ自体を指し、
ドット-ドットはその親ディレクトリを指します。
.It "ルートディレクトリと現在の作業ディレクトリ (Root Directory and Current Working Directory)"
各プロセスは、ルートディレクトリと現在の作業ディレクトリという
概念に関連付けられています。これらはパス名検索を解決する際に
用いられます。プロセスのルートディレクトリは、
ルートファイルシステムのルートディレクトリである必要はありません。
.It "ファイルアクセスパーミッション (File Access Permission)"
ファイルシステム内の各ファイルはアクセスパーミッションの
集合を持っています。これらのパーミッションは、プロセスがファイルに
ついて要求された操作 (たとえば、書き込み用にファイルを開く)
を行なってもよいかどうかを判定するのに使用されます。
アクセスパーミッションはファイルが作成されたときに設定されます。
アクセスパーミッションは
.Xr chmod 2
呼び出しを用いて後から変更することもできます。
.Pp
ファイルアクセスでは、ファイルが
読み取りが許されているかどうか、書き込みが許されているかどうか、
実行が許されているかどうか、
によって分類されます。
ディレクトリファイルでは、
ディレクトリを検索してもよいかどうかを制御するのに
実行パーミッションを使用します。
.Pp
ファイルアクセスパーミッションは、
それをユーザの 3 つの異なるクラス、
ファイルの所有者、ファイルのグループ内のユーザ、その他、
に適用するものとしてシステムにより解釈されます。
各ファイルは、これらの各クラスについて、
独立したアクセスパーミッションのセットを持っています。
アクセスチェックが行なわれると、システムは、
呼び出し側に適用できるアクセス情報をチェックすることによって、
パーミッションが認可されるかどうかを判定します。
.Pp
ファイルについての読み取り、書き込み、実行/検索の
各パーミッションは、次の場合にプロセスに認可されます。
.Pp
プロセスの実効ユーザ ID がスーパーユーザである場合 (注:
スーパーユーザであっても、実行可能でないファイルを実行する
ことはできません)。
.Pp
プロセスの実効ユーザ ID がファイルの所有者のユーザ ID
に一致し、所有者のパーミッションがアクセスを許可している場合。
.Pp
プロセスの実効ユーザ ID がファイルの所有者のユーザ ID
と一致せずに、プロセスの実効グループ ID がファイルのグループ ID
と一致するかまたはファイルのグループ ID がプロセスの
グループアクセスリスト内にあるかのどちらかであり、
グループパーミッションがアクセスを許容している場合。
.Pp
プロセスの実効ユーザ ID も実効グループ ID もグループアクセスリストも、
ファイルの対応するユーザ ID およびグループ ID と
一致しないが、``その他のユーザ'' のパーミッションが
アクセスを許容する場合。
.Pp
上記のいずれにも該当しない場合、パーミッションは拒絶されます。
.It "ソケットとアドレスファミリ (Sockets and Address Families)"
.Pp
ソケットはプロセス間の通信の端点です。
各ソケットには、データ送信用および受信用の待ち行列があります。
.Pp
ソケットには、通信の性質によったタイプがあります。
これらの性質には、ソケットで送受信されるメッセージに
相手の名前が必要かどうか、通信に信頼性があるかどうか、
メッセージ受信者を名付ける際に使用される形式などが含まれます。
.Pp
実際のシステムはそれぞれ、いくつかのソケット
タイプの集合をサポートしています。
利用できるタイプおよびそれらのプロパティの詳細については、
.Xr socket 2
を参照してください。
.Pp
実際のシステムはそれぞれ、いくつかの通信プロトコルの集合を
サポートしています。プロトコルの集合はそれぞれある特定の形式の
アドレスをサポートします。アドレスファミリは、
あるプロトコルのグループに対応するアドレスの集合です。
ソケットはそれぞれ、ソケットが作成されたアドレス
ファミリから選択したアドレスを持ちます。
.Sh 関連項目
.Xr intro 3 ,
.Xr perror 3
.\" Amended by N.Kumagai 2000-3-18