HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
ファイル制御ブロックに関連付けられているバッファの内容を出力し,ファイル・ポインタに関連付けられているファイル制御ブロックおよびバッファを解放することにより,ファイルをクローズします。
#include <stdio.h>int fclose (FILE *file_ptr);
file_ptr
クローズするファイルを指すポインタ。
プログラムが正常終了すると,オープンされているすべてのファイルに対して fclose関数が自動的に呼び出されます。fclose関数は, fflushを暗黙に呼び出すことにより,バッファに格納されているデータを書き込もうとします。
書き込みが失敗した場合 (たとえばディスクが満杯の場合や,ユーザのクォータを超えた場合), fcloseは実行を続行します。 OpenVMS チャネルをクローズし,バッファの割り当てを解除し,ファイル記述子 ( または FILE ポインタ ) に関連付けられているメモリを解放します。バッファに格納されているデータは消失し,ファイル記述子 ( または FILE ポインタ ) はファイルを参照しなくなります。
バッファに格納されているデータを書き込むときに発生したエラーから回復する必要がある場合は,プログラムで fcloseを呼び出す前に, fsync(または fflush) を明示的に呼び出さなければなりません。
0 正常終了を示します。 EOF ファイル制御ブロックがオープンされているファイルに関連付けられいていないことを示します。
オープンされているファイルで制御操作を実行します。
#include <sys/types.h>#include <unistd.h>
#include <fcntl.h>
int fcntl (int file_desc, int request [, int file_desc2]);
file_desc
正常終了した open, fcntl, pipe関数から返されたオープン・ファイル記述子。request
実行する操作。file_desc2
request 引数の値に応じて異なる変数。
fcntl関数は,file_desc 引数によって指定される,オープンされているファイルに対して制御操作を実行します。request 引数の値は,ヘッダ・ファイル <fcntl.h>に定義されています。次の値が定義されています。
F_DUPFD int 型の整数として受け付けられる 3 番目の引数 ( file_desc2) に等しいか,またはそれ以上で,使用可能な ( つまりまだオープンされていない ) ファイル記述子のうち,最小の新しいファイル記述子を返します。 新しいファイル記述子は元のファイル記述子 ( file_desc) と同じファイルを参照します。新しいファイル記述子に関連付けられる FD_CLOEXEC フラグは, exec 関数のいずれかの呼び出しでファイルをオープンしたままにしておくためにクリアされます。
次の 2 つの呼び出しは同じです。
fid = dup(file_desc);
fid = fcntl(file_desc, F_DUPFD, 0);
次の呼び出しがあるとします。
fid = dup2(file_desc, file_desc2);
これは,次の呼び出しに類似しています ( ただし,同じではありません )。
close(file_desc2);
fid = fcntl(file_desc, F_DUPFD, file_desc2);
F_GETFD ファイル記述子 file_desc に関連付けられている close-on-exec フラグの値を取得します。ファイル記述子フラグは,1 つのファイル記述子に関連付けられ,同じファイルを参照する他のファイル記述子には影響を与えません。 file_desc2 引数は指定しないでください。 F_SETFD file_desc に関連付けられている close-on-exec フラグを 3 番目の引数の値に設定します。この引数は int 型です。 3 番目の引数が 0 の場合は,ファイルは exec 関数の呼び出しでオープンされたままになります。つまり, exec 関数から生成された子プロセスは,親からこのファイル記述子を継承します。
3 番目の引数が FD_CLOEXEC の場合は,次の exec 関数の実行が正常終了したときに,ファイルはクローズされます。つまり, exec 関数で生成された子プロセスは,親からこのファイル記述子を継承しません。
F_GETFL file_desc に関連付けられたファイル記述に対し, <fcntl.h> で定義されているファイル状態フラグとファイル・アクセス・モードを取得します。ファイル・アクセス・モードは, <fcntl.h> で定義されているマスク O_ACCMODE を使用して,戻り値から取り出すことができます。ファイル状態フラグおよびファイル・アクセス・モードは,ファイル記述に関連付けられており,異なるオープン・ファイル記述で同じファイルを指す,ほかのファイル記述子には影響しません。 F_SETFL file_desc に関連付けられたファイル記述に対し, int 型の第 3 引数 file_desc2 の対応するビットから, <fcntl.h> で定義されているファイル状態フラグを設定します。 file_desc2 で設定されているビットのうち, <fcntl.h> で定義されているファイル・アクセス・モードやファイル作成フラグに対応するビットは,無視されます。ここで説明した以外の file_desc2 のビットをアプリケーションが変更すると,結果は不定となります。
注意
認識される状態ビットは O_APPEND だけです。 O_APPEND のサポートは標準に準拠していません。 X/Open 標準では,「ファイル状態フラグとファイル・アクセス・モードは,ファイル記述に関連付けられており,異なるオープン・ファイル記述で同じファイルを指す,ほかのファイル記述子には影響しない」となっています。
しかし,追加ビットは FCB に格納されるため,同じ FCB を使用するすべてのファイル記述子は,同じ追加フラグを使用することになり, fcntl(F_SETFL) を使用してこれを設定すると,FCB を共用しているすべてのファイル,すなわち,同じファイル記述子から複製されたすべてのファイルに影響があります。
n 正常終了時に返される値は,次に示すように, request 引数の値に応じて異なります。
- F_DUPFD ---新しいファイル記述子を返します。
- F_GETFD ---FD_CLOEXEC または 0 を返します。
- F_SETFD --- - 1 以外の値を返します。
- 1 エラーが発生したことを示します。 errno は以下のいずれかの値に設定されます。
- EBADF--- file_desc 引数が有効なオープンされているファイル記述子ではなく, file_desc2 引数が負の値であるか,またはプロセス単位のリミットに等しいか,それ以上の値です。
- EFAULT--- file_desc2 引数が不正なアドレスです。
- EINVAL--- request 引数が F_DUPFD であり, file_desc2 引数が負の値であるか,または OPEN_MAX に等しいか,それより大きな値です。
OPEN_MAX の値またはプロセス単位のソフト記述子リミットが確認されます。
不正な値が request 引数に対して指定されました。
- EMFILE--- request 引数が F_DUPFD であり,呼び出しプロセスで現在 OPEN_MAX 個のファイル記述子がオープンされています。または, file_desc2 引数以上のファイル記述子を使用することはできません。
OPEN_MAX の値またはプロセス単位のソフト記述子リミットが確認されます。
- ENOMEM---システムは要求されたファイル記述子に対してメモリを割り当てることができませんでした。
引数をヌル区切りの ASCII 数字列に変換し,数字列のアドレスを返します。数字列は HP C RTL で作成されたスレッド固有の記憶位置に格納されます。
#include <stdlib.h>char *fcvt (double value, int ndigits, int *decpt, int *sign);
value
ヌル区切りの ASCII 数字列に変換される double型のオブジェクト。ndigits
変換後の数字列で使用される小数点以下の ASCII 桁数。decpt
返される数字列の 1 文字目を基準にした小数点の位置。返される数字列には実際の小数点は含まれません。 intの値が負の値の場合は,小数点の位置は,返された数字列の左側に decpt 個のスペースを付加した位置になります ( スペースには 0 が埋められます )。値が 0 の場合は,小数点の位置は返された数字列の最初の桁のすぐ左に設定されます。sign
value 引数が正の値であるか,負の値であるかを示す整数値。 value が負の場合は, fcvt関数は sign によって指定されるアドレスに 0 以外の値を格納します。負でない場合は,この関数は sign によって指定されるアドレスに 0 を代入します。
fcvt関数は,value をヌル区切り数字列に変換し,その数字列を指すポインタを返します。返される下位桁は,C の F 形式で ndigits 桁を出力するために,適切な桁に丸められます。decpt 引数には,数字列の最初の数字を基準にした小数点の位置が代入されます。C の F 形式では,ndigits は小数点以下の桁数です。非常に大きい数値の場合,小数点の左側の数字列が非常に長くなり,小数点以下の桁数は ndigit になります。大きい数値の場合,E 形式が使用されるように, gcvtまたは ecvt関数を使用する方が適切です。
fcvt関数を繰り返し呼び出すと,既存の数字列は上書きされます。
ecvt, fcvt, gcvt関数は,浮動小数点演算に関して IEEE 標準で指定されている次の特殊な値を表します。
値 表現 クワイエット NaN NaNQ シグナリング NaN NaNS +無限大 無限大 - 無限大 - 無限大
これらの各値に割り当てられる符号は,sign 引数に格納されます。 IEEE 浮動小数点表現では,0 (ゼロ) という値は正の場合も負の場合もあり,どちらであるかは sign 引数によって設定されます。
gcvtと ecvtも参照してください。
x 変換後の数字列を指すポインタ。
ファイル・ポインタを, open, creat, dup, dup2, pipe関数から返されたファイル記述子に関連付けます。
#include <stdio.h>FILE *fdopen (int file_desc, char *a_mode);
file_desc
open, creat, dup, dup2, pipeから返されたファイル記述子。a_mode
アクセス・モード指示子。詳細については, fopen関数を参照してください。指定するアクセス・モードは,ファイルをオープンするために使用したモードと一致しなければなりません。バイナリ/テキスト・アクセス・モード ( fdopenの "b" モードおよび creatや openの "ctx=bin" オプション) も含まれます。
fdopen関数を使用すると, UNIX I/O 関数のいずれかでオープンされているファイルに,標準 I/O 関数を使用してアクセスすることができます。通常,ファイルにアクセスするには,そのファイルをオープンした方法に応じて,ファイル記述子またはファイル・ポインタを使用しますが,両方を使用してアクセスすることはできません。詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1 章および第 2 章を参照してください。
ポインタ 操作が正常終了したことを示します。 NULL エラーが発生したことを示します。
ファイルがファイルの終端 (EOF) に到達しているかどうかを判定します。
#include <stdio.h>int feof (FILE *file_ptr);
file_ptr
ファイル・ポインタ。
0 以外の整数 ファイルの終端 (EOF) に到達したことを示します。 0 ファイルの終端 (EOF) に到達していないことを示します。
feof関数と同様ですが, flockfileと funlockfileで保護された範囲だけで使用します。
#include <stdio.h>int feof_unlocked (FILE *file_ptr);
file_ptr
ファイル・ポインタ。
リエントラント版である feof関数は,複数スレッドからの同時呼び出しに対してロックされます。その結果,ストリームの一貫性を保証するためのオーバヘッドが生じます。アンロック版である feof_unlockedを使用すると,このオーバヘッドを避けることができます。 feof_unlocked関数は, feof関数と機能的に同じですが,スレッド・セーフな方法で実装する必要がない点が異なります。 feof_unlocked関数は, flockfile関数と funlockfile関数を対で使用して保護された範囲内でだけ,安全に使用することができます。呼び出し元は, feof_unlockedを使用する前に,ストリームを確実にロックする必要があります。flockfile, ftrylockfile,および funlockfileも参照してください。
0 以外の整数 ファイルの終端に到達したことを示します。 0 ファイルの終端に到達していないことを示します。
ファイルの読み込みまたは書き込みでエラーが発生した場合, 0 以外の整数を返します。
#include <stdio.h>int ferror (FILE *file_ptr);
file_ptr
ファイル・ポインタ。
ferrorを呼び出すと,ファイルがクローズされるまで,または clearerrが呼び出されるまで,0 以外の整数が返されます。
0 正常終了を示します。 0 以外の整数 エラーが発生したことを示します。
| 前へ | 次へ | 目次 | 索引 |