HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
ファイル・ポインタによって示されるオープンされているファイルを,ファイル指定によって示されるファイルに置き換えます。オープンされているファイルはクローズされます。
#include <stdio.h>FILE *freopen (const char *file_spec, const char *a_mode, FILE *file_ptr, ...);
file_spec
有効な OpenVMS または UNIX 形式のファイル指定を格納した文字列を指すポインタ。関数呼び出しの後,指定のファイル・ポインタがこのファイルに関連付けられます。a_mode
アクセス・モード指示子。詳細については, fopen関数を参照してください。file_ptr
ファイル・ポインタ。...
省略可能なファイル属性引数。ファイル属性引数は, creat関数で使用される引数と同じです。
freopen関数は通常,定義済みの名前 stdin, stdout, stderrのいずれかをファイルに関連付けるために使用されます。これらの定義済みの名前の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 2 章を参照してください。
file_ptr freopen が正常終了した場合は,ファイル・ポインタ。 NULL エラーを示します。
浮動小数点数値の小数部および指数部を計算します。
#include <math.h>double frexp (double value, int *eptr);
float frexpf (float value, int *eptr); (Alpha, I64)
long double frexpl (long double value, int *eptr); (Alpha, I64)
value
double, float, long double型の浮動小数点数値。eptr
frexpが指数を格納する intを指すポインタ。
frexp関数は浮動小数点数値 (value) を,次に示すように正規化された小数部と,2 のべき乗に分割します。
value = fraction * (2exp)
小数部は戻り値として返されます。指数部は, eptr によって示される整数変数に格納されます。
#include <math.h> main () { double val = 16.0, fraction; int exp; fraction = frexp(val, &exp); printf("fraction = %f\n",fraction); printf("exp = %d\n",exp); }
この例では, frexpは 16 という値を .5 * 2 5 に変換します。この例では次の出力が生成されます。
fraction = 0.500000 exp = 5
|value| = 無限大または NaN は,不正な引数です。
x value の小数部。 0 結果の小数部と整数部の両方が 0 です。 NaN value が NaN の場合は,NaN が返され, errno は EDOM に設定され, * eptr の値は不定になります。 value | value| = 無限大の場合は, value が返され, errno は EDOM に設定され, * eptr の値は不定になります。
指定されたファイルから書式設定された入力を実行し,その入力を書式指定に従って解釈します。
#include <stdio.h>int fscanf (FILE *file_ptr, const char *format_spec, ...);
file_ptr
入力テキストを提供するファイルを指すポインタ。format_spec
書式指定を格納した文字列を指すポインタ。変換文字の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 2 章を参照してください。...
省略可能な式であり,この式の結果は書式指定に指定した変換指定に対応します。変換指定を指定しない場合は,入力ポインタを省略できます。変換指定を指定する場合は,関数呼び出しに変換指定と正確に同じ数の入力ポインタを指定する必要があります。変換指定は入力ポインタの型と一致しなければなりません。
変換指定は左から右への順に入力ソースに対応付けられます。入力ポインタの数の方が多い場合は,超過するポインタは無視されます。
次の例は変換指定を示しています。
#include <stdio.h> main () { int temp, temp2; fscanf(stdin, "%d %d", &temp, &temp2); printf("The answers are %d, and %d.", temp, temp2); }
stdinによって指定されるファイルに次の内容が格納されているとします。
4 17
この例の変換指定は次の結果を生成します。
The answers are 4, and 17.
書式指定と入力ポインタの詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 2 章を参照してください。
x 正しく照合され,代入された入力項目の数。 EOF ファイルの終端 (EOF) が検出されたか,読み込みエラーが発生したことを示します。読み込みエラーが発生した場合は, errno は次のいずれかに設定されます。
- EILSEQ---不正な文字が検出されました。
- EVMSERR---変換不可能な OpenVMS エラー。 vaxc$errno には OpenVMS エラー・コードが格納されます。これはオーバフローのために数値への変換に失敗したことを示します。
I/O サブシステムからエラーが返された場合,この関数は errno を次の値に設定することがあります。
- EBADF---ファイル記述子が不正です。
- EIO---I/O エラー。
- ENXIO---デバイスが存在しません。
- EPIPE---パイプが壊れています。
- EVMSERR---変換不可能な OpenVMS エラー。 vaxc$errno には OpenVMS エラー・コードが格納されます。これは,対応する C エラー・コードが定義されていない I/O エラーが発生したことを示します。
ファイルの位置をファイル内の指定されたバイト・オフセットに設定します。
#include <stdio.h>int fseek (FILE *file_ptr, long int offset, int direction);
file_ptr
ファイル・ポインタ。offset
バイト数で指定したオフセット。direction
新しい位置を計算するために offset が加算される位置を示す整数。新しい位置は,direction が SEEK_SET の場合はファイルの先頭, direction が SEEK_CUR の場合はファイル位置指示子の現在の値, direction が SEEK_END の場合はファイルの終端 (EOF) になります。
fseek関数は,キャリッジ制御やストリーム・アクセス・ファイルを含まない固定長レコード・アクセス・ファイルの場合,ファイルの位置を任意のバイト・オフセットに設定できますが,他のすべてのファイルの場合はレコード境界にのみ設定できます。提供される標準 I/O 関数は,可変長または VFC レコード・ファイルを最初のバイト,ファイルの終端 (EOF),レコード境界のいずれかに設定します。したがって, fseekに指定する引数は次のいずれかを指定しなければなりません。
- ファイルの先頭または終端
- 現在の位置からオフセット 0 (任意のレコード境界)
- 前の有効な ftell呼び出しから返された位置
これらのレコード・タイプのファイルで任意の位置までシークするための移植可能な方法については, fgetposおよび fsetpos関数を参照してください。
警告
ストリーム・ファイルにアクセスするときに,ファイルの終端 (EOF) を超えてシークし,ファイルに書き込んだ場合, fseek関数はスキップしたバイトに 0 を埋め込むことにより,ホールを作成します。一般にレコード・ファイルに対して fseek関数を使用する場合, ftellに対する前の有効な呼び出しによって返された絶対位置に設定するか,あるいはファイルの先頭または終端に設定するようにしなければなりません。 fseekの呼び出しがこれらの条件を満たさない場合,結果は予測できません。
open, creat, dup, dup2, lseekも参照してください。
0 シークが正常終了したことを示します。 - 1 不正なシークが指定されたことを示します。
ファイルの位置をファイル内の指定されたバイト・オフセットに設定します。この関数は fseekと同じです。
#include <stdio.h>int fseeko (FILE *file_ptr, off_t offset, int direction);
file_ptr
ファイル・ポインタ。offset
バイト数で指定したオフセット。 off_tデータ型は 32 ビット整数または 64 ビット整数です。 64 ビット・インタフェースの場合, 2 GB 以上のファイル・サイズが認められます。このインタフェースは,次に示すように _LARGEFILE 機能テスト・マクロを定義することにより,コンパイル時に選択できます。
CC/DEFINE=_LARGEFILE
direction
新しい位置を計算するために offset が加算される位置を示す整数。新しい位置は,direction が SEEK_SET の場合はファイルの先頭, direction が SEEK_CUR の場合はファイル位置指示子の現在の値, direction が SEEK_END の場合はファイルの終端 (EOF) になります。
fseeko関数は fseek関数と同じですが, offset 引数のデータ型が long intではなく, off_t型である点が異なります。
指定されたファイルのファイル位置指示子を設定します。
#include <stdio.h>int fsetpos (FILE *stream, const fpos_t *pos);
stream
ファイル・ポインタ。pos
実装で定義されている構造体を指すポインタ。 fgetpos関数は,この後の fsetposの呼び出しで使用できる情報をこの構造体に格納します。
fgetpos関数を使用する前に, fsetpos関数を呼び出します。
0 正常終了を示します。 - 1 エラーを示します。
ファイル記述子によって指定されるファイルに関する情報にアクセスします。
#include <stat.h>関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると, fstat関数に対して, OpenVMS Version 7.0 より前の動作に相当するローカル時刻ベースのエントリ・ポイントが有効になります。int fstat (int file_desc, struct stat *buffer);
file_desc
ファイル記述子。buffer
stat_t型の構造体を指すポインタ。この構造体は <stat.h>ヘッダ・ファイルに定義されています。指定されたファイルに関する情報がこの引数に格納されます。 buffer によって示される構造体のメンバは次のとおりです。
メンバ 型 定義 st_dev dev_t 物理デバイス名を指すポインタ st_ino[3] ino_t ファイル ID が格納される 3 ワード st_mode mode_t ファイル "mode" (prot, dir,...) st_nlink nlink_t UNIX システムとの互換性を維持するためにのみ提供される st_uid uid_t オーナのユーザ ID st_gid gid_t グループ・メンバ: st_uid から取得 st_rdev dev_t UNIX システムとの互換性 -- 常に 0 st_size off_t バイト数で表したファイル・サイズ st_atime time_t ファイル・アクセス時刻,常に st_mtime と同じ st_mtime time_t 最終変更時刻 st_ctime time_t ファイル作成時刻 st_fab_rfm char レコード・フォーマット st_fab_rat char レコード属性 st_fab_fsz char 固定ヘッダ・サイズ st_fab_mrs unsigned レコード・サイズ
型 dev_t, ino_t, off_t, mode_t, nlink_t, uid_t, gid_t, time_tは <stat.h>ヘッダ・ファイルに定義されています。しかし,互換性を維持するように設定してコンパイルした場合は (/DEFINE=_DECC_V4_SOURCE), dev_t, ino_t, off_tだけが定義されます。
off_tデータ型は 32 ビット整数または 64 ビット整数です。 64 ビットインタフェースの場合, 2 GB 以上のファイル・サイズが認められます。このインタフェースは,次に示すように _LARGEFILE 機能テスト・マクロを定義することにより,コンパイル時に選択できます。
CC/DEFINE=_LARGEFILE
OpenVMS Version 7.0 では,時刻は Epoch (1970 年 1 月 1 日 GMT 標準時 00:00:00) からの時間 (秒数) で与えられます。
st_mode構造体メンバは状態情報モードであり, <stat.h>ヘッダ・ファイルに定義されています。 st_modeビットは次のとおりです。
ビット 定数 定義 0170000 S_IFMT ファイルのタイプ 0040000 S_IFDIR ディレクトリ 0020000 S_IFCHR 文字スペシャル 0060000 S_IFBLK ブロック・スペシャル 0100000 S_IFREG 一般 0030000 S_IFMPC 多重化された文字スペシャル 0070000 S_IFMPB 多重化されたブロック・スペシャル 0004000 S_ISUID 実行時にユーザ ID を設定 0002000 S_ISGID 実行時にグループ ID を設定 0001000 S_ISVTX 使用後もスワップされたテキストを保存 0000400 S_IREAD 読み込みアクセス許可,オーナ 0000200 S_IWRITE 書き込みアクセス許可,オーナ 0000100 S_IEXEC 実行/検索アクセス許可,オーナ
fstat関数はリモート・ネットワーク・ファイルに対しては機能しません。
注意 (Alpha, I64)
OpenVMS Alpha システムおよび I64 システムでは, stat, fstat, utime, utimes関数は, POSIX 準拠のファイル・タイムスタンプに対する新しいファイル・システム・サポートを活用できるように拡張されています。このサポートは,OpenVMS Alpha Version 7.3 およびそれ以降の OpenVMS Alpha システムと I64 システムの ODS-5 デバイスでのみ使用できます。
このように変更される前は, stat関数と fstat関数は st_ctime,st_mtime, st_atime フィールドの値を,次のファイル属性をもとに設定していました。
st_ctime - ATR$C_CREDATE (ファイル作成時刻)
st_mtime - ATR$C_REVDATE (ファイル改訂時刻)
st_atime - ファイル・アクセス時刻がサポートされないため,常に st_mtime に設定。また,ファイル変更時刻に関しては, utimeと utimesは ATR$C_REVDATE ファイル属性を変更し, file-access-time 引数を無視していました。
機能が変更された後,ODS-5 デバイスのファイルでは, stat関数と fstat関数は次の新しいファイル属性をもとに,st_ctime,st_mtime, st_atime フィールドの値を設定します。
st_ctime - ATR$C_ATTDATE (最終属性変更時刻)
st_mtime - ATR$C_MODDATE (最終データ変更時刻)
st_atime - ATR$C_ACCDATE (最終アクセス時刻)ODS-2 デバイスなど,ATR$C_ACCDATE が 0 の場合, stat関数と fstat関数は st_atime を st_mtime に設定します。
ファイル変更時刻に関しては, utime関数と utimes関数は ATR$C_REVDATE ファイル属性と ATR$C_MODDATE ファイル属性の両方を変更します。ファイル・アクセス時刻に関しては,これらの関数は ATR$C_ACCDATE ファイル属性を変更します。 ATR$C_MODDATE ファイル属性と ATR$C_ACCDATE ファイル属性を ODS-2 デバイスで設定しても,効果がありません。
互換性を維持するために,デバイスの種類にかかわらず, stat, fstat, utime, utimesの以前の動作はデフォルトのまま残されています。
新しい動作は,アプリケーションを起動する前に,実行時に DECC$EFS_FILE_TIMESTAMPS 論理名を "ENABLE" に定義することにより明示的に有効にする必要があります。この論理名を設定しても,ODS-2 デバイスのファイルの場合, stat, fstat, utime, utimesの動作には影響ありません。
0 正常終了を示します。 - 1 保護違反以外のエラーを示します。 - 2 保護違反を示します。
| 前へ | 次へ | 目次 | 索引 |