日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
OPEN(2) FreeBSD システムコールマニュアル OPEN(2) 名称 open, openat -- 読み込み、書み込みまたは実行のためにファイルをオープンす るか、または作成する ライブラリ 標準 C ライブラリ (libc, -lc) 書式 #include <fcntl.h> int open(const char *path, int flags, ...); int openat(int fd, const char *path, int flags, ...); 解説 path によって指定されたファイル名は、引数 flags フラグによって指定される ように実行、または読み込みおよび書き込みのいずれかのためにオープンされ、 ファイル記述子は、呼び出しているプロセスに返されます。flags 引数は、ファ イルが存在しないならば、(O_CREAT フラグを指定することによって) ファイルが 作成されることを示します。この場合に、open() と openat() は、追加の引数 mode_t mode を必要とし、ファイルは、chmod(2) で説明されるように、そしてプ ロセスの umask 値 (umask(2) 参照) によって修正されるモード mode で作成さ れます。 openat() 関数は、path が相対パスを指定する場合を除いて、open() 関数と同等 です。この場合、オープンされるファイルは、カレントワーキングディレクトリ の代わりにファイル記述子 fd に関連しているディレクトリに相対的に決定され ます。flag パラメータとオプションの 4 番目のパラメータは、ちょうど open() のパラメータに対応しています。openat() が、fd パラメータの特別な値 AT_FDCWD を渡されるなら、カレントワーキングディレクトリが、使用され、振る 舞いは、open() への呼び出しと同じです。 capsicum(4) ケーパビリティモードで、open() は、許可されません。openat() への path 引数は、sys/kern/vfs_lookup.c で定義されるように、ファイル記述 子 fd と完全に相対的でなければなりません。path は、絶対パスであってはなら ず、".." 構成要素を含んではなりません。さらに、path のシンボリックリンク は、いずれも ".." 構成要素を含んでいません。fd は、AT_FDCWD であってはな りません。 指定されるフラグは、論理和 (OR) されている次の値によって形成されます: O_RDONLY 読み込みのみのためにオープン O_WRONLY 書み込みのみのためにオープン O_RDWR 読み込みと書み込みのみのためにオープン O_EXEC 実行のみのためにオープン O_NONBLOCK オープンでブロックしません O_APPEND 各書み込みで付け加えます O_CREAT ファイルが存在しないなら, 作成する O_TRUNC サイズを 0 に切り詰める O_EXCL 作成するファイルが存在するなら, エラーとなる O_SHLOCK 共有ロックを不可分に取得する O_EXLOCK 排他的ロックを不可分に取得する O_DIRECT キャッシュの効果を除去するまたは減少する O_FSYNC 同期的な書き込み O_SYNC 同期的な書き込み O_NOFOLLOW シンボリックリンクをたどりません O_NOCTTY 無視します O_TTY_INIT 無視します O_DIRECTORY ファイルがディレクトリでないなら, エラーとなる O_CLOEXEC オープン時に FD_CLOEXEC を設定する O_VERIFY ファイルの内容を検証する O_APPEND 設定でファイルをオープンすることによって、ファイルの各書き込み は、ファイルの終りに追加されます。O_TRUNC が指定され、ファイルが存在する なら、ファイルは、0 の長さに切り詰められます。O_EXCL が O_CREAT とともに 設定され、すでにファイルが存在するなら、open() は、エラーを返します。これ は、簡単な排他的なアクセスロックメカニズムを実装するために使用されます。 O_EXCL が設定され、パス名の最後の構成要素がシンボリックリンクであるなら、 open() は、たとえシンボリックリンクが存在しない名前を指していても、失敗し ます。O_NONBLOCK フラグが指定され、open() システムコールが、いくつかの理 由 (例えば、ダイヤルアップ回線でキャリアを待つ) のためにブロックされてい るプロセスの結果となるなら、open() は、直ちに返ます。記述子は、その後の操 作のために非ブロッキングモードのままとなります。 O_FSYNC が、マスクで使用されるなら、すべての書き込みは、直ちにディスクに 書き込み、カーネルは、書き込まれたデータをキャッシュせず、記述子でのすべ ての書き込みは、書き込まれるデータが完了するまで、返りません。 O_SYNC は、POSIX によって必要とされる O_FSYNC と同義語です。 O_NOFOLLOW がマスクで使用され、open() に渡されたターゲットファイルがシン ボリックリンクであるなら、open() は、失敗します。 ファイルをオープンするとき、flock(2) セマンティックスがあるロックは、共有 ロックのために O_SHLOCK または排他的ロックのために O_EXLOCK を設定するこ とによって取得することができます。O_CREAT でファイルを作成するなら、ロッ クのための要求は、(基本的なファイルシステムがロックをサポートするという条 件で) 決して失敗しません。 O_DIRECT は、読み込みと書き込みのキャッシュの効果を最小にするか、または除 外するために使用されます。システムは、利用者が読み込むか、または書き込む データのキャッシュを避けることを試みます。データをキャッシュすることを避 けることができないなら、データにキャッシュがある影響を最小化します。この フラグの使用は、注意して使用されないなら、性能を大幅に減少するかもしれま せん。 O_NOCTTY は、tty デバイスをオープンするとき、OS が制御端末としてこのファ イルを割り当てないことを保証するために使用されます。これは、FreeBSD では デフォルトですが、POSIX の互換性のために存在しています。open() システム コールは、FreeBSD で制御端末に割り当てません。 O_TTY_INIT は、最初に TTY をオープンするとき、OS が端末属性を復旧すること を確実にするために使用されます。これは、FreeBSD ではデフォルトですが、 POSIX の互換性のために存在しています。TTY に関して open() への初期の呼び 出しは、常に FreeBSD でのデフォルトの端末属性を復旧します。 O_DIRECTORY は、結果のファイル記述子がディレクトリを参照することを保証す るために使用されます。デバイスノードのように、O_RDONLY でオープンするのが 危険でもあるファイルを高い特権があるアプリケーションがオープンすることか ら防ぐために、このフラグを使用することができます。 O_CLOEXEC は、新しく返されたファイル記述子のために FD_CLOEXEC フラグを設 定するために使用されます。 O_VERIFY は、ファイルの内容が、進行するオープンを許可する前に、確認される べきであることをカーネルに示すために使用されます。何を ``verified'' (確認 する) かの意味の詳細は、特有の実装です。実行時のリンカ (rtld) は、それら で操作する前に、共有オブジェクトが確認されたことを保証するために、このフ ラグを使用します。 成功するなら、open() は、ファイル記述子と呼ばれる負でない整数を返します。 失敗すると、-1 を返します。ファイル内の現在の位置をマークするために使用さ れるファイルポインタは、ファイルの先頭に設定されます。 スリープしている devfs(5) からのデバイスノードのオープンがシグナルによっ て割り込まれるなら、たとえ SA_RESTART フラグがシグナルのために設定されて いても、その呼び出しは、常に EINTR で失敗します。スリープしている FIFO (mkfifo(2) 参照) のオープンは、通常どおり再開されます。 新しいファイルが作成されるとき、それを含んでいるディレクトリのグループが 与えられます。 O_CLOEXEC フラグが指定されなかったなら、新しい記述子は、execve(2) システ ムコールに渡ってオープンされたままに設定されます。close(2), fcntl(2) と O_CLOEXEC の説明を参照してください。 システムは、1 つのプロセスによって、同時にオープンされるファイル記述子の 数に制限を課します。getdtablesize(2) システムコールは、現在のシステムの制 限を返します。 戻り値 成功すれば、open() と openat() は、ファイル記述子と呼ばれる負でない整数を 返します。失敗すれば、-1 を返し、エラーを示す値を errno に設定します。 エラー 指定されるファイルは、次を除いてオープンされます: [ENOTDIR] パス接頭辞の構成要素が、ディレクトリではありません。 [ENAMETOOLONG] パス名の構成要素が 255 文字を越えているか、または、全 体のパス名が 1023 文字を越えています。 [ENOENT] O_CREAT が、設定されず、指定されたファイルが、存在しま せん。 [ENOENT] 存在しなければならないパス名の構成要素が存在しません。 [EACCES] 検索パーミッションが、パス接頭辞の構成要素のために拒否 されています。 [EACCES] (読み込みおよび書き込むのために) 必要なパーミッション が、与えられたフラグのために拒否されています。 [EACCES] O_TRUNC が、指定され、書き込みパーミッションが否定され ています。 [EACCES] O_CREAT が、指定され、ファイルが、存在せず、それが作成 されるディレクトリが、書き込みを許可していません。 [EPERM] O_CREAT が指定され、ファイルが存在していなくて、作成さ れることになっているディレクトリには、不変のフラグが設 定されています、詳細については、chflags(2) マニュアル ページを参照してください。 [EPERM] 指定されたファイルには、不変フラグが設定されて、ファイ ルは、変更されています。 [EPERM] 指定されたファイルには、追加専用フラグが設定され、ファ イルは、変更され、O_TRUNC が指定されるか、または O_APPEND が指定されていません。 [ELOOP] パス名を変換するときに、あまりにも多くのシンボリックリ ンクに遭遇しました。 [EISDIR] 指定されたファイルが、ディレクトリであり、引数が、修正 されるように指定しています。 [EROFS] 指定されたファイルが、読み込み専用のファイルシステムに あり、ファイルが、修正されようとしています。 [EROFS] O_CREAT が指定され、指定されたファイルが読み込み専用の ファイルシステムにあります。 [EMFILE] プロセスが、オープンしているファイル記述子のための制限 に既に到達しました。 [ENFILE] システムのファイルテーブルが、満杯です。 [EMLINK] O_NOFOLLOW が、指定され、ターゲットが、シンボリックリ ンクです。 [ENXIO] 指定されたファイルが、キャラクタ特殊またはブロック特殊 ファイルであり、この特殊ファイルに関連したデバイスが、 存在しません。 [ENXIO] O_NONBLOCK が設定され、指定されたファイルは、FIFO で、 O_WRONLY が設定され、プロセスには、読み込みでオープン しているファイルがありません。 [EINTR] open() 操作が、シグナルによって割り込まれました。 [EOPNOTSUPP] O_SHLOCK または O_EXLOCK が、指定されましたが、基本的 なファイルシステムが、ロックをサポートしていません。 [EOPNOTSUPP] 指定されたファイルが、それへのアクセスをサポートしてい ないファイルシステムを通してマウントされた特殊ファイル です (例えば、NFS)。 [EWOULDBLOCK] O_NONBLOCK と O_SHLOCK または O_EXLOCK の 1 つが、指定 され、ファイルが、ロックされています。 [ENOSPC] O_CREAT が、指定され、ファイルが、存在せず、ディレクト リを含んでいるファイルシステムに空間がないので、新しい ファイルのためのエントリが置かれているディレクトリを拡 張することができません。 [ENOSPC] O_CREAT が、指定され、ファイルが、存在せず、ファイルが 作成されているファイルシステムに空きの inode がありま せん。 [EDQUOT] O_CREAT が、指定され、ファイルが、存在せず、ディレクト リを含んでいるファイルシステムのディスクブロックのユー ザのクォータが使い果たされたので、新しいファイルのため のエントリが置かれているディレクトリを拡張することがで きません。 [EDQUOT] O_CREAT が、指定され、ファイルが、存在せず、ファイルが 作成されているファイルシステムの inode のユーザの クォータが使い果たされました。 [EIO] ディレクトリエントリの作成、または O_CREAT のための inode の割り付けの間に、I/O エラーが起こりました。 [ETXTBSY] ファイルが、実行されている純粋な手続き (共有テキスト) ファイルであり、open() システムコールが、書き込みアク セスを要求します。 [EFAULT] path 引数が、プロセスの割り付けられたアドレス空間の外 側を指しています。 [EEXIST] O_CREAT と O_EXCL が、指定され、ファイルが、存在してい ます。 [EOPNOTSUPP] ソケットをオープンする試みが行われました (現在、実装さ れていません)。 [EINVAL] O_RDONLY, O_WRONLY, O_RDWR と O_EXEC の不正な組み合わ せで記述子をオープンする試みが行われました。 [EBADF] path 引数が、絶対パスを指定していません、そして fd 引 数は、AT_FDCWD でもなく検索のためにオープンされた有効 なファイル記述子でもありません。 [ENOTDIR] path 引数が、絶対パスではありません、そして fd が、 AT_FDCWD でもなくディレクトリに関連しているファイル記 述子でもありません。 [ENOTDIR] O_DIRECTORY が指定され、ファイルがディレクトリではあり ません。 [ECAPMODE] AT_FDCWD が、指定され、プロセスが、ケーパビリティモー ドです。 [ECAPMODE] open() が、呼び出されて、プロセスが、ケーパビリティ モードです。 [ENOTCAPABLE] path が、絶対のパスであるか、または fd によって指定さ れたディレクトリの階層構造の外側のディレクトリをもたら す ".." 構成要素を含んでいます。 関連項目 chmod(2), close(2), dup(2), fexecve(2), fhopen(2), getdtablesize(2), getfh(2), lgetfh(2), lseek(2), read(2), umask(2), write(2), fopen(3), capsicum(4) 規格 これらの関数は、IEEE Std 1003.1-2008 (``POSIX.1'') によって明記されていま す。FreeBSD は、O_NOFOLLOW がフラグに設定されるとき、POSIX によって指定さ れるように ELOOP の代わりに EMLINK を errno に設定し、パス名の最後の構成 要素は、その最後でない構成要素の 1 つで非常に多くのシンボリックリンク横断 の場合からそれを区別しているシンボリックリンクです。 歴史 open() 関数は、Version 6 AT&T UNIX で登場しました。openat() 関数は、 FreeBSD 8.0 で導入されました。 バグ The Open Group Extended API Set 2 仕様は、基本的なディレクトリが現在検索 を可能にするかどうかではなく、検索のために fd がオープンされているかどう かに基づいている、fd が検索可能であるかかどうのテストを要求します。openat の現在の実装は、代わりにディレクトリの現在のパーミッションをチェックしま す。 FreeBSD 11.2 March 28, 2018 FreeBSD 11.2