.\" Copyright (c) 1990, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Chris Torek and the American National Standards Committee X3, .\" on Information Processing Systems. .\" .\" 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. .\" .\" @(#)fopen.3 8.1 (Berkeley) 6/4/93 .\" .\" $FreeBSD$ .Dd June 4, 1993 .Dt FOPEN 3 .Os .Sh 名称 .Nm fopen , .Nm fdopen , .Nm freopen .Nd ストリームをオープンする関数 .Sh 書式 .Fd #include .Ft FILE * .Fn fopen "const char *path" "const char *mode" .Ft FILE * .Fn fdopen "int fildes" "const char *mode" .Ft FILE * .Fn freopen "const char *path" "const char *mode" "FILE *stream" .Sh 解説 .Fn fopen 関数は、 .Fa path が指すストリングの名前を持つファイルをオープンし、 それにストリームを関連付けます。 .Pp 引数 .Fa mode は、以下のシーケンスの 1 つで始まるストリングを指します (このシーケンスには、 別のキャラクタが続けても構いません)。 .Bl -tag -width indent .It Dq Li r テキストファイルを読込み用にオープンします。ストリームは、ファイルの 最初に位置付けられます。 .It Dq Li r+ 読込み用と書込み用にオープンします。ストリームは、ファイルの最初に 位置付けられます。 .It Dq Li w ファイルを長さゼロに切り捨てるか、書込み用テキストファイルを 作成します。ストリームは、ファイルの最初に位置付けられます。 .It Dq Li w+ 読込み用と書込み用にオープンします。ファイルが存在しない場合はその ファイルが作成され、存在する場合は切り捨てられます。ストリームは、ファイル の最初に位置付けられます。 .It Dq Li a 書込み用にオープンします。ファイルが存在しない場合はそのファイルが 作成されます。ストリームは、ファイルの最後に位置付けられます。 .It Dq Li a+ 読込み用と書込み用にオープンします。ファイルが存在しない場合はその ファイルが作成されます。ストリームは、ファイルの最後に位置付けられます。 .El .Pp .Fa mode ストリングには、3 番目の文字として、または上で説明した 2 文字からなる 文字列の間に指定する文字として、文字 ``b'' を組み込むことができます。 これは .St -ansiC との互換性を保つためのもので、 効果はありません。``b'' は無視されます。 .Pp 作成されたファイルのモードは、 .Pf \\*q Dv S_IRUSR \&| .Dv S_IWUSR \&| .Dv S_IRGRP \&| .Dv S_IWGRP \&| .Dv S_IROTH \&| .Dv S_IWOTH Ns \\*q .Pq Li 0666 がプロセスの umask 値 ( .Xr umask 2 参照) で修正されたものになります。 .Pp 読み書きストリームでは、読込みと書込みをどのような順序でも 混ぜることができ、前バージョンの .Em stdio のように、それらの間にシーク操作は必要ありません。 しかしながら、これは他のシステムとの移植性を保持しません。というのは、 .Tn ANSI C は、入力オペレーションがファイルの終了に達していない場合、 ファイル位置付け関数が出力と入力の間に 介在することを要求しているからです。 .Pp .Fn fdopen 関数は、既存のファイル記述子 .Fa fildes にストリームを関連付けます。ストリームの .Fa mode には、ファイル記述子のモードとの互換性が必要です。 .Pp .Fn freopen 関数は、 .Fa path が指すストリングの名前が付いたファイルを開き、 .Fa stream が指すストリームを関連付けます。オリジナルのストリームが存在する 場合、それは閉じられます。 .Fa mode 引数は、 .Fn fopen 関数と同じです。 .Fn freopen の主な使用目的は、標準テキストストリーム .Pf ( Em stderr, .Em stdin .Em stdout ) に関連付けられたファイルを変更することです。 .Sh 戻り値 呼び出しが成功すると、 .Fn fopen, .Fn fdopen, .Fn freopen は .Tn FILE ポインタを戻します。問題がある場合は .Dv NULL を戻し、そのエラーを示す値にグローバル変数 .Va errno を設定します。 .Sh エラー .Bl -tag -width [EINVAL] .It Bq Er EINVAL .Fn fopen , .Fn fdopen , .Fn freopen の .Fa mode が正しくありません。 .El .Pp ルーチン .Xr malloc 3 で指定されたエラーに関して、 .Fn fopen , .Fn fdopen , .Fn freopen 関数がエラーになり、 .Va errno が設定されることがあります。 .Pp ルーチン .Xr open 2 で指定されたエラーに関して、 .Fn fopen 関数がエラーになり、 .Va errno が設定されることがあります。 .Pp ルーチン .Xr fcntl 2 で指定されたエラーに関して、 .Fn fdopen 関数がエラーになり、 .Va errno が設定されることがあります。 .Pp ルーチン .Xr open 2 , .Xr fclose 3 , .Xr fflush 3 で指定されたエラーに関して、 .Fn freopen 関数がエラーになり、 .Va errno が設定されることがあります。 .Sh 関連項目 .Xr open 2 , .Xr fclose 3 , .Xr fseek 3 , .Xr funopen 3 .Sh 規格 .Fn fopen 関数と .Fn freopen 関数は、 .St -ansiC に準拠しています。 .Fn fdopen 関数は、 .St -p1003.1-88 に準拠しています。 .\"X kuma 1999-11-5