HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
指定されたストリーム・ファイルの現在のバイト・オフセットを返します。この関数は ftellと同じです。
#include <stdio.h>off_t ftello (FILE *file_ptr);
file_ptr
ファイル・ポインタ。
ftello関数は ftell関数と同じですが,戻り値が long int型ではなく, off_t型である点が異なります。off_tデータ型は 64 ビット整数または 32 ビット整数です。 64 ビット・インタフェースでは, 2 GB 以上のファイル・サイズが認められます。このインタフェースは,次に示すように _LARGEFILE 機能テスト・マクロを定義することにより,コンパイル時に選択できます。
CC/DEFINE=_LARGEFILE
timeptr によって示される構造体に, 1970 年 1 月 1 日 00:00:00 からの経過時間を返します。
#include <timeb.h>関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると, ftime関数に対して, OpenVMS バージョン 7.0 より前の動作に相当するローカル時刻ベースのエントリ・ポイントが有効になります。int ftime (struct timeb *timeptr);
timeptr
構造体 timeb_tを指すポインタ。
typedef timeb_tは, <timeb.h>ヘッダ・ファイルに定義されている次の構造体を参照します。
typedef struct timeb { time_t time; unsigned short millitm; short timezone; short dstflag; };
メンバ timeは秒数で時刻を示します。
メンバ millitmは小数点以下の時間をミリ秒単位で示します。
ftimeを呼び出した後, timeb構造体の timezoneメンバと dstflagメンバには,それぞれグローバル変数 timezoneおよび dstflagの値が格納されます。 timezoneおよび dstflagグローバル変数については, tzset関数の説明を参照してください。
0 正常終了。 timeb_t 構造体に情報が格納されます。 - 1 エラーを示します。システムの時差係数 ( つまりシステム時刻と UTC 時刻の差 ) が正しく設定されていないことを示すことがあります。 SYS$TIMEZONE_DIFFERENTIAL 論理名の値が不正な場合は,この関数は異常終了し, errno は EINVAL に設定されます。
ファイルを指定の長さに切り捨てます。
#include <unistd.h>int ftruncate (int filedes, off_t length);
filedes
書き込みのためにオープンされているファイルの記述子。length
ファイルの新しい長さ (バイト数)。 off_tデータ型は 32 ビット整数または 64 ビット整数です。 64 ビット・インタフェースでは, 2 GB 以上のファイル・サイズが認められます。このインタフェースは,次に示すように _LARGEFILE 機能テスト・マクロを定義することにより,コンパイル時に選択できます。
CC/DEFINE=_LARGEFILE
ftruncate関数は,ファイルを指定された位置で切り捨てます。レコード・ファイルの場合,位置はレコード境界でなければなりません。また,ファイルはローカルの一般ファイルでなければなりません。切り捨てる前のファイルのサイズが length より大きい場合は,超過するデータは消失します。切り捨てる前のファイルのサイズが length より短い場合は,前の長さと新しい長さの間のバイトは 0 として読み込まれます。
0 正常終了を示します。 - 1 エラーが発生しました。 errno はエラーを示すように設定されます。
stdio (FILE*)オブジェクトの所有権を取得します。
#include <stdio.h>int ftrylockfile (FILE *file_ptr);
file_ptr
ファイル・ポインタ。
ftrylockfile関数はスレッドにより使用され, stdio (FILE*)オブジェクトが使用可能であれば,その所有権を取得します。 ftrylockfile関数は, flockfileのノン・ブロッキング版です。ftrylockfile関数は,成功するとゼロを返し,ロックを取得できないとゼロ以外を返します。
flockfileおよび funlockfileも参照してください。
0 成功を示します。 0 以外 ロックを取得できなかったことを示します。
ファイル・ツリーを検索します。
#include <ftw.h>int ftw (const char *path, int(*function)(const char *, const struct stat *, int), int depth);
path
検索するディレクトリ階層構造。function
ディレクトリ階層構造の各ファイルに対して起動する関数。depth
ftwで使用できるディレクトリ・ストリームまたはファイル記述子 ( またはその両方 ) の最大数。この引数は 1〜OPEN_MAX の範囲でなければなりません。
ftw関数は,path 引数によって指定されるディレクトリから順にディレクトリ階層構造を再帰的に検索します。階層構造内の各ファイルに対して, ftwは function 引数によって指定される関数を呼び出し,ファイルの名前を格納したヌル区切り文字列,ファイルに関する情報を格納した stat構造体を指すポインタ,および整数を渡します。
整数はファイル・タイプを示します。使用できる値は <ftw.h>に定義されており,次のとおりです。
FTW_F 一般ファイル FTW_D ディレクトリ FTW_DNR 読み込むことができないディレクトリ FTW_NS stat を正しく実行できないファイル
整数が FTW_DNR の場合は,そのディレクトリに格納されているファイルとサブディレクトリは処理されません。
整数が FTW_NS の場合は, stat構造体の内容は意味がありません。たとえば,読み込みアクセス許可が与えられ,実行 (検索) アクセス許可が与えられていないディレクトリ内のファイルの場合, function 引数は FTW_NS を渡します。
ftw関数はファイルまたはサブディレクトリを処理する前に,ディレクトリの処理を終了します。
ftw関数は次のいずれかが発生するまで,検索を続行します。
- path 引数によって指定されたディレクトリ階層構造が終了するまで。
- function 引数によって指定された関数の呼び出しが 0 以外の値を返すまで。
- ftw関数の内部でエラー (I/O エラーなど) が検出されるまで。
ftw関数は再帰的であるため,非常に深いファイル構造に適用すると,スタック・オーバフローが発生して,メモリ・フォルトで終了する可能性があります。
ftw関数では,操作時に動的記憶域を割り当てるために malloc関数が使用されます。 function 引数によって示される関数から longjmpを呼び出した場合など, ftwが強制終了された場合, ftwはその記憶域の割り当てを解除することができません。したがって,記憶域は割り当てられたままになります。
割り込みを安全に処理するには,割り込みが発生したという事実を格納し, function 引数によって指定される関数が次回呼び出されるときに 0 以外の値を返すようにします。
注意
- ftw関数はリエントラントです。 function 引数として指定される関数もリエントラントであることを確認してください。
- C RTL は, stat構造体の標準準拠の定義および関連する定義をサポートしています。これを使用するには,機能テスト・マクロ _USE_STD_STAT を使用してアプリケーションをコンパイルします。詳細は,お使いのシステムのヘッダ・ファイル <stat.h>を参照してください。
malloc, longjump,および statも参照してください。
0 正常終了を示します。 x function 引数によって指定される関数が検索を停止したことを示し,関数から返された値を返します。 - 1 エラーを示します。 errno は次のいずれかの値に設定されます。
- EACCES--- path 引数のコンポーネントに対して検索アクセス許可が拒否されたか,または path 引数に対して読み込みアクセス許可が拒否されました。
- ENAMETOOLONG---パス文字列の長さが PATH_MAX より長いか,または [_POSIX_NO_TRUNC] が有効なときに,パス名コンポーネントが NAME_MAX より長いことを示します。
- ENOENT--- path 引数が存在しないファイルの名前を指しているか,または空文字列を指しています。
- ENOMEM---この操作を実行するのに必要なメモリが不足しています。
また, function 引数によって示される関数でエラーが検出されると, errno が適切な値に設定されることがあります。
stdioストリームをアンロックします。
#include <stdio.h>void funlockfile (FILE *file_ptr);
file_ptr
ファイル・ポインタ。
funlockfile関数は, stdioストリームをアンロックします。ロックを保持していたスレッドは,ストリームの排他使用を手放すことになります。引数のファイル・ポインタは,正しいことが前提です。 flockfileは,ファイル・ポインタが無効でもロックを実行します。また, funlockfile関数は,呼び出し元スレッドが引数のファイル・ポインタのロックを所有していない場合でも,エラーになりません。
対応する flockfileと funlockfileの呼び出しは,ネストさせることができます。ストリームを再帰的にロックすると,対応する最後の funlockfileを呼び出すまでは,ストリームはロックされたままになります。
すべての C RTL ファイル・ポインタ入出力関数は, flockfileおよび funlockfileを呼び出したかのように,ファイル・ポインタをロックします。
flockfileおよび ftrylockfileも参照してください。
特定のファイルに対する I/O が完了するのを待ちます。
#include <stdio.h>int fwait (FILE *fp);
fp
オープンされているファイルに対応するファイル・ポインタ。
fwait関数は主に,保留状態の非同期 I/O が完了するのを待つために使用されます。
0 正常終了を示します。 - 1 エラーを示します。
ストリームの単位を判断し,設定します。
#include <wchar.h>int fwide (FILE *stream, int mode);
stream
ファイル・ポインタ。mode
ストリームの単位を指定する値。
fwide関数は,stream によって示されるストリームの単位を判断し,ストリームの単位が設定されていない場合は,次の方法で mode 引数に従って設定します。
mode 引数: fwide 関数の動作: 0 より大きい場合 ストリームをワイド文字単位に設定する。 0 より小さい場合 ストリームをバイト単位に設定する。 0 の場合 ストリームの単位を変更しない。
ストリームの単位がすでに設定されている場合は, fwideは単位を変更しません。 fwideに対してエラー状態が定義されていないため, fwideが 0 を返した場合は,呼び出し元のアプリケーションは errnoを確認する必要があります。
> 0 呼び出しの後,ストリームはワイド文字単位になります。 < 0 呼び出しの後,ストリームはバイト単位になります。 0 呼び出しの後,ストリームは単位が設定されない状態になるか,またはストリーム引数が不正です。 errno が設定されます。
ワイド文字の書式文字列の制御のもとで出力をストリームに書き込みます。
#include <wchar.h>int fwprintf (FILE *stream, const wchar_t *format, ...);
stream
ファイル・ポインタ。format
書式指定を格納したワイド文字の文字列を指すポインタ。書式指定および変換指定とそれに対応する引数の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 2 章を参照してください。...
省略可能な式であり,式の型は書式指定に指定した変換指定に対応します。変換指定を指定しない場合は,出力ソースを省略できます。変換指定を指定する場合は,関数呼び出しに変換指定と正確に同じ数の出力ソースを指定する必要があります。変換指定は出力ソースの型と一致しなければなりません。
変換指定は左から右への順に出力ソースに対応付けられます。出力ソースの数の方が多い場合は,超過するソースは無視されます。
fwprintf関数は, format によって示されるワイド文字の文字列の制御のもとで, stream によって示されるストリームに出力を書き込みます。書式指定は,後続の引数を出力に変換する方法を指定します。書式指定に対して引数が不足している場合は,動作は未定義になります。引数が残っているのに,書式指定が不足する場合は,超過する引数は評価されますが,無視されます。書式指定文字列の末尾が検出されると, fwprintf関数は制御を呼び出し元に返します。format 引数は,次のような 0 個以上のディレクティブで構成されます。
- 通常のワイド文字 (パーセント記号 (%) を除く)
- 変換指定
n 書き込んだワイド文字の文字数。 負の値 エラーを示します。 errno は次のいずれかの値に設定されます。
- EILSEQ---不正な文字が検出されました。
- EINVAL---引数が不足しています。
- ENOMEM---変換のために使用できるメモリが不足しています。
- ERANGE---浮動小数点演算オーバフロー。
- EVMSERR---変換不可能な OpenVMS エラー。 vaxc$errno には OpenVMS エラー・コードが格納されます。これは,オーバフローが発生したために数値への変換が失敗したことを示します。
I/O サブシステムからエラーが返された場合,この関数は errno を次の値に設定することがあります。
- EBADF---ファイル記述子が不正です。
- EIO---I/O エラー。
- ENOSPC---ファイルを格納しているデバイスに空き領域がありません。
- ENXIO---デバイスが存在しません。
- EPIPE---パイプが壊れています。
- ESPIPE---追加のためにオープンされているファイルで不正なシークが実行されました。
- EVMSERR---変換不可能な OpenVMS エラー。 vaxc$errno には,OpenVMS エラー・コードが格納されます。これは,対応する C エラー・コードがない I/O エラーが発生したことを示します。
次の例では,日付と時刻を "Sunday, July 3, 10:02" という形式でプリントし,その後, pi を小数点以下 5 桁まで印刷する方法を示しています。
#include <math.h> #include <stdio.h> #include <wchar.h> /*...*/ wchar_t *weekday, *month; /* pointers to wide-character strings */ int day, hours, min; fwprintf(stdout, L"%ls, %ls %d, %.2d:%.2d\n", weekday, month, day, hour, min); fwprintf(stdout, L"pi = %.5f\n", 4 * atan(1.0));
| 前へ | 次へ | 目次 | 索引 |