スポンサーリンク

INTRO(2) FreeBSD システムコールマニュアル INTRO(2)

名称

intro − システムコールとエラー番号の紹介

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <errno.h>

解説

このセクションでは、システムコール、エラー戻り、その他の共通な定義および コンセプトの概要について説明します。

戻り値

ほとんどすべてのシステムコールが外部識別子 errno によって参照されるエラー 番号を備えています。 <sys/errno.h> 内でこの識別子は次のように定義されてい ます。

extern int * __error();

#define errno (* __error())

__error() 関数は、初期スレッド以外のスレッドについては、スレッドに固有な 構造体のフィールドを指すポインタを返します。初期スレッドと非スレッドプロ セスの場合、 __error() は、以前の定義と互換性のあるグローバル変数 errno を指すポインタを返します。

システムコールは、エラーを検出すると、障害を示す整数値 (通常は -1) を返 し、それに応じて変数 errno を設定します。 <これにより、-1 を受け取ったと きに障害を解釈し、それに応じた行動をとることを可能にします。> 呼び出しが 正常に完了した場合は errno が設定されることはありません。いったん設定され ると、別のエラーが起きるまでそのままです。これはエラーの後でだけ調べるべ きです。多くのシステムコールがこれらのエラー番号の意味を過重にしており、 意味は呼び出しのタイプと状況に従って解釈する必要があることに注意してくだ さい。

以降に示すのはエラーの完全なリストであり、これらの名前は <sys/errno.h> に 記載されています。

       0 Undefined error: 0.「未定義のエラー: 0」未使用。

1 EPERM Operation not permitted.「操作が許されません」適切な特権をもつ プロセスに限定された操作、またはファイルその他のリソースの所有者 に限定された操作を実行しようとしました。

2 ENOENT No such file or directory.「そのようなファイルまたはディレクト リはありません」指定のパス名の構成要素が存在しないか、またはパス 名が空の文字列でした。

3 ESRCH No such process.「そのようなプロセスはありません」指定のプロセ ス ID に対応するプロセスが見つかりませんでした。

4 EINTR Interrupted system call.「関数呼び出しが割り込まれました」割り 込み可能な関数の実行中に、非同期シグナル (たとえば、 SIGINT また は SIGQUIT) がプロセスによって捕らえられました。シグナルハンドラ が正常に戻ると、割り込みされたシステムコールがエラー状態を返した ように見えます。

5 EIO Input/output error.「入出力エラーです」何らかの物理的な入力エラー または出力エラーが起きました。このエラーは、同じファイル記述子に 対する操作が次に行われるまで報告されず、後続のエラーによって失わ れる (上書きされる) 可能性があります。

6 ENXIO Device not configured.「デバイスが準備されていません」存在しな いデバイスを参照している特殊ファイルへの入出力が行われたか、また はデバイスの制限を越えた要求が行われました。このエラーは、テープ ドライブがオンラインでない場合や、またはディスクパックがドライブ にロードされていない場合などにも発生する可能性があります。

7 E2BIG Argument list too long.「引数のリストが長すぎます」新しいプロセ スの引数リストと環境変数リストに使用されるバイト数が、現在の限界 である 65536 バイト (<sys/param.h> 内の NCARGS) を越えました。

8 ENOEXEC Exec format error.「実行形式エラーです」実行を要求されたファ イルのパーミッションは適切でしたが、実行可能ファイルとして要求さ れる形式ではありませんでした。

9 EBADF Bad file descriptor.「ファイル記述子が不良です」ファイル記述子 引数が範囲外であったか、開いていないファイルを参照していたか、ま たは書込み (読取り) 専用に開かれたファイルに読取り (書込み) 要求 が行われました。

10 ECHILD No child processes.「子プロセスがありません」 wait(2) または waitpid(2) 関数が、子プロセスが存在しないか、待機されたことのない 子プロセスを持たないプロセスによって実行されました。

11 EDEADLK Resource deadlock avoided.「リソースデッドロックを回避しまし た」デッドロック状況になる可能性のあるシステムリソースをロックし ようとしました。

12 ENOMEM Cannot allocate memory.「メモリの割り当てができません」新しい プロセスイメージが、ハードウェアまたはシステムが課するメモリ管理 制約によって許容されるより多くのメモリを要求しました。スワップ空 間の不足は通常、一時的です。しかし、コアの不足は一時的ではありま せん。ソフト限界を対応するハード限界まで増加させることはできま す。

13 EACCES Permission denied.「パーミッションが拒絶されました」ファイル アクセスパーミッションで禁止されている方法でファイルにアクセスし ようとしました。

14 EFAULT Bad address.「不正なアドレスです」呼び出しで渡された引数を使 おうとしているときに、システムが無効なアドレスを検出しました。

15 ENOTBLK Block device required.「ブロックデバイスが要求されています」 ブロックデバイス操作が、非ブロックデバイスまたはファイルについて 試みられました。

16 EBUSY Device busy.「デバイスがビジー状態です」その時点で使用されてい るシステムリソースを、その要求と干渉するであろう方法で使おうとし ました。

17 EEXIST File exists.「ファイルが存在します」すでに存在するファイルが 不適切なコンテキストで指定されました。たとえば、 link(2) システム コールにおける新しいリンク名としてです。

18 EXDEV Cross-device link.「デバイスをまたぐリンクです」別のファイルシ ステム上のファイルへのハードリンクが試みられました。

19 ENODEV Operation not supported by device.「操作がデバイスによってサ ポートされていません」あるデバイスに不適切な関数を適用しようしま した。たとえば、プリンタのような書込み専用デバイスを読み取ろうと しました。

20 ENOTDIR Not a directory.「ディレクトリではありません」指定のパス名の 構成要素は確かに存在しましたが、ディレクトリが求められているにも かかわらず、それがディレクトリではありませんでした。

21 EISDIR Is a directory.「ディレクトリです」書込みモードを指定してディ レクトリをオープンしようとしました。

22 EINVAL Invalid argument.「無効な引数です」無効な引数が指定されました (たとえば、 signal(3) システムコールまたは kill(2) システムコール に未定義のシグナルを指定する場合)。

23 ENFILE Too many open files in system.「システム内でオープンされてい るファイルが多すぎます」システムが許容するファイル記述子の数の最 大数に到達しており、少なくとも 1 つがクローズされるまで、オープン しようとする要求は満たされません。

24 EMFILE Too many open files.「オープンしているファイルが多すぎます」
<現在のリリースでは、プロセス 1 個につきオープンできるファイル数 の上限は 64 です。> getdtablesize(2) システムコールで現在の限界を 取得できます。

25 ENOTTY Inappropriate ioctl for device.「デバイスに不適切な ioctl で す」ファイルまたは特殊デバイスに不適切な操作を要求する制御関数 (ioctl(2) を参照) を試みました。

26 ETXTBSY Text file busy.「テキストファイルがビジーです」別のプロセス によって書込み用にオープンされた純粋プロシージャ (共有テキスト) ファイルから新しいプロセスを作ろうとしたか、または純粋プロシー ジャファイルが実行されている間に、書込みアクセスを要求する open(2) 呼び出しが実行されました。

27 EFBIG File too large.「ファイルが大きすぎます」ファイルのサイズが最 大値を超過しました (約 2.1E9 バイト)。

28 ENOSPC No space left on device.「デバイスの空き領域不足です」該当す るファイルシステムで新たなディスクブロックが利用できないために、 通常ファイルへの write(2) 処理、ディレクトリの作成、シンボリック リンクの作成、ディレクトリエントリの作成が失敗しました。または、 該当するファイルシステムで新たな inode が利用できないために、新し く作成するファイルに対する inode の割り当てが失敗しました。

29 ESPIPE Illegal seek.「不正なシークです」 lseek(2) システムコールがソ ケット、パイプ、または FIFO に対して実行されました。

30 EROFS Read-only file system.「読取り専用ファイルシステムです」ファイ ルまたはディレクトリを変更しようとする試みが、その時点で読取り専 用であるファイルシステムに対して行われました。

31 EMLINK Too many links.「リンクが多すぎます」 1 つのファイルについて 許容されるハードリンクの最大数を超過しました (1 ファイルにつき ハードリンク数の限界は 32767 です)。

32 EPIPE Broken pipe.「パイプが破壊されてました」データを読み取るプロセ スのないパイプ、ソケット、または FIFO に対しての書込みです。

33 EDOM Numerical argument out of domain.「数値引数が領域外です」数値入 力引数が、数学関数の定義域の外側にありました。

34 ERANGE Result too large.「結果が大き過ぎます」関数の数値結果が大きす ぎて、利用できる場所に入りません (おそらく精度を超過したのでしょ う)。

35 EAGAIN Resource temporarily unavailable.「リソースが一時的に利用でき ません」これは一時的な状況であり、後で同じルーチンを呼び出した時 に正常に完了する可能性があります。

36 EINPROGRESS Operation now in progress.「操作が現在進行中です」完了す るのに時間のかかる操作 (connect(2) など) をノンブロッキングオブ ジェクトに対し試みました (fcntl(2) を参照)。

37 EALREADY Operation already in progress.「操作は既に進行中です」既に 操作が進行中のノンブロッキングオブジェクトに対してさらに操作を試 みました。

38 ENOTSOCK Socket operation on non-socket.「ソケットでないものについて ソケット操作を行いました」ここに書いてあるとおりです。

39 EDESTADDRREQ Destination address required.「宛先アドレスが要求されて います」ソケットに関する操作に際し、必要なアドレスが抜けていま す。

40 EMSGSIZE Message too long.「メッセージが長すぎます」内部メッセージ バッファ、または何らかのネットワーク上の制限より大きなメッセージ がソケットで送信されました。

41 EPROTOTYPE Protocol wrong type for socket.「ソケットに対するプロトコ ルのタイプが間違っています」要求されたソケットタイプではサポート されないプロトコルが指定されました。たとえば、タイプ SOCK_STREAM では、 ARPA インターネット UDP プロトコルを使用できません。

42 ENOPROTOOPT Protocol not available.「プロトコルが利用できません」 getsockopt(2) 呼び出しまたは setsockopt(2) 呼び出しで、間違ったオ プションまたはレベルが指定されました。

43 EPROTONOSUPPORT Protocol not supported.「プロトコルがサポートされて いません」指定したプロトコルがシステム内に組み込まれていないか、 またはそのプロトコルの実装が存在しません。

44 ESOCKTNOSUPPORT Socket type not supported.「ソケットタイプがサポート されていません」指定したソケットタイプがシステム内に組み込まれて ないか、またはそのソケットタイプの実装が存在しません。

45 EOPNOTSUPP Operation not supported.「操作がサポートされていません」 引数が指すオブジェクトのタイプは、指定した操作をサポートしていま せん。このエラーが起きるのは、通常は、ファイル記述子がこの操作を サポートできないファイルまたはソケットを参照しているときです。た とえば、データグラムソケット上で接続を accept しようしたときで す。

46 EPFNOSUPPORT Protocol family not supported.「プロトコルファミリがサ ポートされていません」指定したプロトコルファミリがシステムに組み 込まれていないか、またはそのプロトコルファミリの実装が存在してい ません。

47 EAFNOSUPPORT Address family not supported by protocol family.「アド レスファミリがプロトコルファミリによってサポートされていません」 要求したプロトコルと互換性のないアドレスが使用されました。たとえ ば、 ARPA インターネットプロトコルで NS アドレスを使用できるとは 必ずしも期待すべきではないでしょう。

48 EADDRINUSE Address already in use.「アドレスが既に使用中です」各アド レスごとに、一度に 1 つだけを利用できます。

49 EADDRNOTAVAIL Cannot assign requested address.「要求されたアドレスを 割り当てできません」通常は、このマシン上にないアドレスでソケット を作成しようとした結果です。

50 ENETDOWN Network is down.「ネットワークがダウンしています」ソケット 操作の結果、動作していないネットワークに遭遇しました。

51 ENETUNREACH Network is unreachable.「ネットワークに到達できません」 到達できないネットワークに向けてソケット操作を試みました。

52 ENETRESET Network dropped connection on reset.「リセットによりネット ワークの接続が失われました」接続していたホストがクラッシュして再 起動されました。

53 ECONNABORTED Software caused connection abort.「ソフトウェアによる接 続中断が生じました」自マシン側の原因により接続中断が発生しまし た。

54 ECONNRESET Connection reset by peer.「接続が通信相手によってリセット されました」接続が通信相手 (peer) によって強制的にクローズされま した。これはタイムアウトまたは再起動によって、リモート側のソケッ トで接続が失われた結果であるのが普通です。

55 ENOBUFS No buffer space available.「バッファの空きがありません」シス テムに十分なバッファがないか、待ち行列が一杯になったために、ソ ケットまたはパイプについての操作が行われませんでした。

56 EISCONN Socket is already connected.「ソケットは既に接続されていま す」既に接続されたソケットに対して connect(2) 要求を行いました。 または、接続済みのソケットに対する sendto(2)sendmsg(2) 要求に 際し、既に接続されているのに宛先を指定しました。

57 ENOTCONN Socket is not connected.「ソケットは接続されていません」ソ ケットが接続されておらず、しかも (データグラムソケットを送信する ときに) アドレスが指定されていなかったために、データを送信または 受信する要求が許可されませんでした。

58 ESHUTDOWN Cannot send after socket shutdown.「ソケットのシャットダウ ンの後で送信ができません」以前に shutdown(2) を呼び出して既に シャットダウンさせてしまったために、ソケットに対しデータを送信す る要求が許可されませんでした。

60 ETIMEDOUT Operation timed out.「操作がタイムアウトしました」ある時間 が経過するまでに接続相手が適切に応答しなかったために、 connect(2) 要求または send(2) 要求の処理に失敗しました (タイムアウトの期間は 通信プロトコルに左右されます)。

61 ECONNREFUSED Connection refused.「接続が拒絶されました」接続相手のマ シンが接続を自ら拒否したので、接続を確立できませんでした。これ は、通常、相手ホストで有効でないサービスに接続しようとした結果で す。

62 ELOOP Too many levels of symbolic links.「シンボリックリンクのレベル が多すぎます」パス名の探索に、32 (MAXSYMLINKS) を越えるシンボリッ クリンクが含まれていました。

63 ENAMETOOLONG File name too long.「ファイル名が長すぎます」パス名の構 成要素が {NAME_MAX} 文字を越えているか、またはパス名全体が {PATH_MAX} 文字を越えています (pathconf(2) の中の _PC_NO_TRUNC の 解説も参照して下さい)。

64 EHOSTDOWN Host is down.「ホストがダウンしています」宛先ホストがダウ ンしているためにソケット操作が失敗しました。

65 EHOSTUNREACH No route to host.「ホストへの経路はありません」到達不可 能なホストにソケット操作をしようとしました。

66 ENOTEMPTY Directory not empty.「ディレクトリが空ではありません」ディ レクトリ削除または名前変更の呼び出しに対し、 ‘.’ と ‘..’ 以外のエ ントリを含むディレクトリが指定されました。

67 EPROCLIM Too many processes.「プロセスが多すぎます」

68 EUSERS Too many users.「ユーザが多すぎます」クォータシステムがテーブ ルエントリを使い切りました。

69 EDQUOT Disc quota exceeded.「ディスククォータが超過しました」ユーザ のディスクブロッククォータを使い尽くしたために、通常のファイルへ の write(2) 、ディレクトリの作成、シンボリックリンクの作成、ディ レクトリエントリの作成が失敗しました。もしくは、ユーザの inode クォータを使い尽くしたために、新しく作成されたファイルのための inode の割り当てに失敗しました。

70 ESTALE Stale NFS file handle.「失効した NFS ファイルハンドルです」 オープンされている (NFS ファイルシステム上の) ファイルに対してア クセスしようとしましたが、指定したファイル記述子が参照するファイ ルは現在利用できません。これは NFS サーバ上でファイルが削除された か、または他の破滅的な何かが起きたことを示していると思われます。

72 EBADRPC RPC struct is bad.「RPC 構造体が不良です」 RPC 情報の交換が 不成功でした。

73 ERPCMISMATCH RPC version wrong.「RPC バージョンが間違っています」通 信相手の RPC のバージョンが、こちらのバージョンと互換性がありませ ん。

74 EPROGUNAVAIL RPC prog. not avail.「RPC プログラムが利用できません」 要求したプログラムがリモートホストに登録されていません。

75 EPROGMISMATCH Program version wrong.「プログラムバージョンが間違って います」要求したバージョンのプログラムが、リモートホスト (RPC) 上 で利用できません。

76 EPROCUNAVAIL Bad procedure for program.「プログラムにとって間違った 手続きです」リモートプログラム内に存在しない手続きに対し RPC 呼び 出しが試みられました。

77 ENOLCK No locks available.「ロックが利用できません」システムが課し た、同時ファイルロック数の制限に達しました。

78 ENOSYS Function not implemented.「関数が実装されていません」このシス テムで利用できないシステムコールを実行しようとしました。

79 EFTYPE Inappropriate file type or format.「ファイルの型または形式が 不適切です」操作が誤った型のファイルに行われたか、またはデータ ファイルの形式が誤っています。

80 EAUTH Authentication error.「認証エラーです」 NFS ファイルシステムを マウントするために不正な認証チケットを使おうとしました。

81 ENEEDAUTH Need authenticator.「認証物が必要です」指定した NFS ファイ ルシステムをマウントするために認証チケットが必要です。

82 EIDRM Identifier removed.「識別子は削除されました」 IPC の識別子は、 現在のプロセスがそれで待っている間に削除されました。

83 ENOMSG No message of desired type.「要求された型のメッセージがありま せん」要求した型のメッセージが IPC メッセージキューにありません。 または、メッセージカタログは要求したメッセージを含んでいません。

84 EOVERFLOW Value too large to be stored in data type.「データタイプに 格納するには大きすぎる値です」関数からの数値の戻り値が、呼び出し 側で用意した場所に格納するには大きすぎます。

85 ECANCELED Operation canceled.「処理はキャンセルされました」予定され ていた処理はキャンセルされました。

86 EILSEQ Illegal byte sequence.「不正なバイト列です」多バイト文字をデ コードしている際に、関数は不正または不完全なバイト列もしくは不正 なワイド文字に遭遇しました。

87 ENOATTR Attribute not found.指定された拡張属性は存在しません。

88 EDOOFUS Programming error.関数や API を、実行時にしか検知されない方 法で誤用しました。

定義

       プロセス ID (Process ID)

システム内のアクティブな各プロセスは、プロセス ID と呼ばれる負で ない整数によって一意に識別されます。この ID の範囲は 0 から 99999 までです。

親プロセス ID (Parent process ID)
新しいプロセスは、現在のアクティブなプロセスから作成されます (fork(2) を参照)。プロセスの親プロセス ID は、最初はそれを作成し たプロセスのプロセス ID となっています。そのプロセスを作成したプ ロセスが exit した場合、それぞれの子プロセスの親プロセス ID は、 システムプロセス init(8) の ID に設定されます。

プロセスグループ (Process Group)
アクティブなプロセスはそれぞれがあるプロセスグループのメンバであ り、プロセスグループはプロセスグループ ID と呼ばれる負でない整数 によって識別されます。プロセスグループ ID はそのグループのリーダ のプロセス ID です。このグループ化によって、関連づけられたプロセ スの集団にシグナルを送る (termios(4) を参照) ことや、 csh(1) の ジョブ制御機構を可能にします。

セッション (Session)
セッションは 1 つ以上のプロセスグループの集合です。セッションは setsid(2) の呼び出しが成功すると作成されます。これによって、呼び 出したプロセスは、新規のセッションが 1 つだけ持つプロセスグループ の唯一のメンバになります。

セッションリーダ (Session leader)
setsid(2) の呼び出しの成功によって、新しいセッションを作成したプ ロセスは、セッションリーダとして知られます。端末を自分が制御する 端末 (termios(4) を参照) として取得できるのは、セッションリーダだ けです。

制御プロセス (Controlling process)
制御端末を持つセッションリーダが制御プロセスです。

制御端末 (Controlling terminal)
セッションに関連づけられている端末は、そのセッションとそのメンバ に対する制御端末として知られます。

端末プロセスグループ ID (Terminal Process Group ID)
端末は、セッションリーダによって制御端末として取得されます。ひと たび端末がセッションに関連づけられると、端末プロセスグループ ID をプロセスグループの ID に設定することによって、そのセッション内 のどのプロセスグループでも、フォアグラウンドに置くことができるよ うになります。この機能は、同じ端末をめぐり競合している複数のジョ ブの間で調停を行うために用いられます (csh(1)tty(4) を参照)。

親のないプロセスグループ (Orphaned Process Group)
プロセスグループは、ジョブ制御を行うシェルの制御下にない場合、 親 なしになったとみなされます。より正確に言うと、そのプロセスグルー プのメンバはどれも、そのグループと同じセッションに属す親プロセス を持たず、かつ、親プロセスが別のプロセスグループに属す場合、その プロセスグループは親なしになります。なお、プロセスが終了すると き、その子プロセスの親プロセスは init(8) となるように変更されま す。そしてこれは別個のセッションになります。親のないプロセスグ ループのメンバの全てが、必ずしも親のないプロセス (プロセスを作成 したプロセスが終了した) というわけではありません。この定義によ り、セッションリーダのプロセスグループは親なしになります。

実ユーザ ID と実グループID (Real User ID and Real Group ID)
システム上の各ユーザは、実ユーザ ID と呼ばれる正の整数によって識 別されます。

各ユーザは、1 つまたは複数のグループのメンバでもあります。これら のグループの 1 つは他のものから区別され、アカウンティング機能を実 現するのに使用されます。この区別されたグループに対応する正の整数 は、実グループ ID と呼ばれます。

すべてのプロセスは実ユーザ ID と実グループ ID を持っています。こ れらは、そのプロセスを作成したプロセスと等価な属性値を使って初期 化されます。

実効ユーザ ID、実効グループ ID、グループアクセスリスト (Effective User Id, Effective Group Id, and Group Access List)
システムリソースへのアクセスは、実効ユーザ ID とグループアクセス リストという 2 つの値を使って決定されます。グループアクセスリスト の最初のメンバは、実効グループ ID としても知られています (POSIX.1 では、グループアクセスリストは、補助グループ ID のセットとして知 られ、実効グループ ID がリストのメンバであるかどうかは未規定で す)。

実効ユーザ ID と実効グループ ID は、最初はそれぞれ、プロセスの実 ユーザ ID と実グループ ID です。いずれも (おそらくその先祖のいず れかが) ユーザ ID 設定ファイルまたはグループ ID 設定ファイルを実 行することにより変更することができます (execve(2) を参照してくだ さい)。慣習で、実効グループ ID (グループアクセスリストの最初のメ ンバ) は複製されるので、グループ ID 設定プログラムの実行の結果、 もともと持っていた (実) グループ ID が失われることはありません。

グループアクセスリストは、リソースへのアクセスが可能かどうかを決 定するためにだけ使用されるグループ ID の集合です。アクセスチェッ クは、以降の ‘‘ファイルアクセスパーミッション’’ で説明するように 行われます。

退避ユーザ ID と退避グループ ID (Saved Set User ID and Saved Set Group ID)
プロセスが新しいファイルを実行するとき、ファイルがユーザ ID 設定 であれば、実効ユーザ ID はそのファイルの所有者に設定され、ファイ ルがグループ ID 設定であれば、実効グループ ID (グループアクセスリ ストの最初の要素) はファイルのグループに設定されます。それからプ ロセスの実効ユーザ ID は退避ユーザ ID として記録され、プロセスの 実効ユーザ ID は退避グループ ID として記録されます。これらの記録 された値は、実 ID (setuid(2) を参照) に戻った後で、実効ユーザ ID または実効グループ ID をこれらの値に回復するために利用できます。 (POSIX.1 では、退避ユーザ ID と退避グループ ID はオプションであ り、 setuid および setgid の内部で使用されますが、これはスーパ ユーザについて意図どおりには機能しません)。

スーパユーザ (super-user)
実効ユーザ ID が 0 の場合、そのプロセスは スーパユーザプロセスと して認識され、特別な権利が認められます。

記述子 (Descriptor)
open(2), dup(2) によってファイルが参照されるとき、または pipe(2), socket(2), socketpair(2) によってソケットが作成されるときにシステ ムによって割り当てられる整数です。この整数は、指定のプロセスやそ の子プロセスから、そのファイルやソケットへのアクセスパスを一意に 識別します。

ファイル名 (File Name)
最高 {NAME_MAX} 文字からなる名前であって、通常ファイル、特殊ファ イル、ディレクトリに名前を付けるのに使用されます。

これらの文字は、 NUL (ASCII 0) および ‘/’ 文字 (スラッシュ、 ASCII 47) を除く、任意の 8 ビット値から選択できます。

なお、一般に、ファイル名の一部として ‘*’, ‘?’, ‘[’, ‘]’ を使用す るのは賢明ではありません。シェルによってこれらの文字には特殊な意 味がつけられるからです。

パス名 (Path Name)
パス名は、 NUL で終端された文字列です。スラッシュ ‘/’ (省略可能) で始まり、スラッシュで区切られた 0 個以上のディレクトリ名が続き、 ファイル名 (省略可能) が続きます。パス名の長さの合計は {PATH_MAX} 文字未満である必要があります (あるシステム上では、この制限は無制 限かもしれません)。

パス名がスラッシュで始まる場合、パス検索は ルートディレクトリから 開始します。そうでない場合、検索は現在の作業ディレクトリから開始 します。スラッシュだけの場合、ルートディレクトリを指定します。空 のパス名は現在のディレクトリを指します。

ディレクトリ (Directory)
ディレクトリは特殊なタイプのファイルであり、他のファイルを参照す るエントリを含んでいます。ディレクトリエントリをリンクと呼びま す。伝統的に、ディレクトリには少なくとも 2 つのリンク、 ‘.’ と ‘..’ を含みます。これらはそれぞれ ドットおよび ドット-ドットと呼 ばれます。ドットは、そのディレクトリ自体を指し、ドット-ドットはそ の親ディレクトリを指します。

ルートディレクトリと現在の作業ディレクトリ (Root Directory and Current Working Directory)
各プロセスは、ルートディレクトリと現在の作業ディレクトリという概 念を持つとされてきました。これらの概念はパス名検索を解決する際に 用いられます。プロセスのルートディレクトリは、ルートファイルシス テムのルートディレクトリである必要はありません。

ファイルアクセスパーミッション (File Access Permission)
ファイルシステム内の各ファイルはアクセスパーミッションの集合を 持っています。これらのパーミッションは、プロセスがファイルについ て要求された操作 (たとえば、書込み用にファイルをオープンする) を 行ってもよいかどうかを判定するのに使用されます。アクセスパーミッ ションはファイルが作成されたときに設定されます。アクセスパーミッ ションは chmod(2) 呼び出しを用いて後から変更することもできます。

ファイルアクセスでは、ファイルが読取りが許されているかどうか、書 込みが許されているかどうか、実行が許されているかどうか、によって 分類されます。ディレクトリファイルでは、ディレクトリを検索しても よいかどうかを制御するのに実行パーミッションを使用します。

システムがファイルアクセスパーミッションを解釈するにあたり、ユー ザの 3 つの異なるクラス (ファイルの所有者、ファイルのグループ内の ユーザ、その他) のどれに適用するかによって解釈します。各ファイル は、これらの各クラスについて、独立したアクセスパーミッションの集 合を持っています。アクセスチェックが行われると、システムは、呼び 出し側に適用できるアクセス情報をチェックすることによって、パー ミッションが認可されるかどうかを判定します。

ファイルについての読取り、書込み、実行 / 検索の各パーミッション は、次の場合にプロセスに認可されます。

プロセスの実効ユーザ ID がスーパユーザである場合 (注: スーパユー ザであっても、実行可能でないファイルを実行することはできません)。

プロセスの実効ユーザ ID がファイルの所有者のユーザ ID に一致し、 所有者のパーミッションがアクセスを許可している場合。

プロセスの実効ユーザ ID がファイルの所有者のユーザ ID と一致せず に、プロセスの実効グループ ID がファイルのグループ ID と一致する かまたはファイルのグループ ID がプロセスのグループアクセスリスト 内にあるかのどちらかであり、グループパーミッションがアクセスを許 容している場合。

プロセスの実効ユーザ ID も実効グループ ID もグループアクセスリス トも、ファイルの対応するユーザ ID およびグループ ID と一致しない が、 ‘‘その他のユーザ’’ のパーミッションがアクセスを許容する場 合。

上記のいずれにも該当しない場合、パーミッションは拒絶されます。

ソケットとアドレスファミリ (Sockets and Address Families)
ソケットはプロセス間の通信の端点です。各ソケットには、データ送信 用および受信用の待ち行列があります。

ソケットには、通信の性質によったタイプがあります。これらの性質に は、ソケットで送受信されるメッセージに相手の名前が必要かどうか、 通信に信頼性があるかどうか、メッセージ受信者を名付ける際に使用さ れる形式などが含まれます。

実際のシステムはそれぞれ、いくつかのソケットタイプの集合をサポー トしています。利用できるタイプおよびそれらのプロパティの詳細につ いては、 socket(2) を参照してください。

実際のシステムはそれぞれ、いくつかの通信プロトコルの集合をサポー トしています。プロトコルの集合はそれぞれある特定の形式のアドレス をサポートします。アドレスファミリは、あるプロトコルのグループに 対応するアドレスの集合です。ソケットはそれぞれ、ソケットが作成さ れたアドレスファミリから選択したアドレスを持ちます。

関連項目

intro(3), perror(3)

FreeBSD 10.0 February 27, 1995 FreeBSD 10.0

スポンサーリンク