日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトル
目次
まえがき
リファレンス・セクション
   ≫ライブラリ関数一覧
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)


目次 索引




指定されたファイルに関する情報にアクセスします。

形式

#include <stat.h>

int stat (const char *file_spec, struct stat *buffer); (ISO POSIX-1)

int stat (const char *file_spec, struct stat *buffer, ...); (HP C Extension)

関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると,OpenVMS Version 7.0 およびそれ以前の動作と等価な, stat関数へのローカル時刻ベースのエントリ・ポイントが使用可能となります。

機能テスト・マクロ _USE_STD_STAT を定義してコンパイルすると, X/Open 標準の stat構造体の定義を使用する stat関数のバリアントが有効になります。機能テスト・マクロ _USE_STD_STAT は,_DECC_V4_SOURCE マクロおよび _VMS_V6_SOURCE マクロと互いに排他です。


引数



file_spec

有効な OpenVMS または UNIX スタイルのファイル指定 ( ワイルドカードは使用できません )。指定されたファイルの読み込み,書き込み,または実行の許可は不要ですが,ファイル指定の中のファイルに至るすべてのディレクトリに到達できる必要があります。 UNIX スタイルのファイル指定の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1 章を参照してください。

buffer

stat型の構造体へのポインタ。便宜のため,ヘッダ・ファイル <stat.h>の中で, typedef stat_tstruct statとして定義されています。

この引数は特定のファイルに関する情報を受け取ります。説明のセクションに,buffer がポイントする構造体のメンバを示します。

...

オプションのデフォルト・ファイル名文字列。

これは stat関数に対して指定できる,唯一のオプションの RMS キーワードです。オプションの RMS キーワードとその値の一覧については, creat関数の説明を参照してください。


説明

機能テスト・マクロ _USE_STD_STAT を有効にしていない場合,従来の stat構造体が使用されます。 _USE_STD_STAT を有効にすると,X/Open 標準に準拠した stat構造体が使用されます。

従来の stat 構造体

機能テスト・マクロ _USE_STD_STAT に DISABLE を定義すると,以下に示す従来の stat構造体が使用されます。

メンバ 定義
st_dev dev_t 物理デバイス名へのポインタ
st_ino[3] ino_t ファイル ID を受け取る 3 つのワード
st_mode mode_t ファイル・"モード" (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_tino_toff_tmode_tnlink_tuid_tgid_t,および time_tは, <stat.h>ヘッダ・ファイルに定義されています。ただし,互換性を指定してコンパイルする場合 (/DEFINE=_DECC_V4_SOURCE) には, dev_tino_t,および off_tのみが定義されます。

off_tデータ型は 32 ビット整数または 64 ビット整数です。 64 ビット・インタフェースでは 2 GB 以上のファイル・サイズを扱うことができ,次のように,コンパイル時に _LARGEFILE 機能テスト・マクロを定義することで選択することができます。

CC/DEFINE=_LARGEFILE 

OpenVMS Version 7.0 の段階では,時刻は Epoch (00:00:00 GMT,1970 年 1 月 1 日) 後の経過秒数で指定されます。

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 実行/検索許可,オーナ

stat関数は,リモート・ネットワーク・ファイルには使用できません。

ファイルがレコード・ファイルである場合, st_sizeフィールドにはキャリッジ・コントロール情報が含まれます。このため, st_size値は,ファイルから読み込める文字数には対応しません。

また, st_sizeが正しい値を報告するように, C RTL と RMS の両方のバッファをフラッシュする必要があります。

標準準拠の stat 構造体

OpenVMS Version 8.2 では,UNIX との互換性を向上させるため,機能テスト・マクロ _USE_STD_STAT と標準準拠の stat構造体が導入されました。

_USE_STD_STAT に ENABLE を定義すると,以下の動作となります。

  • 従来の struct statの定義
    struct statの古い定義は使用できなくなります。新しい機能を利用するには,アプリケーションの再コンパイルが必要となります。既存のアプリケーションは,新しい機能を使用するように再コンパイルしない限り,従来の定義および機能を引き続き使用します。

  • 関数バリアント
    statfstatlstat,および ftwの呼び出しでは,新しい型の構造体へのポインタが受け付けられます。これらの関数呼び出しは,それぞれ新しいライブラリ・エントリ __std_stat__std_fstat__std_lstat,および __std_ftwにマッピングされます。

  • ほかの機能テスト・マクロとの互換性
    _DECC_V4_SOURCE のソース・コード互換性はサポートされません。 _DECC_V4_SOURCE と _USE_STD_STAT を同時に有効にしないでください。
    _VMS_V6_SOURCE のバイナリ互換性はサポートされません。 _VMS_V6_SOURCE と _USE_STD_STAT を同時に有効にしないでください。その結果, time_tフィールドでは,ローカル時刻ではなく UTC だけがサポートされます。

  • 型の変更
    以下の型の変更が有効になります。

    • 32 ビットの gid 型 gid_tが使用されます。 _DECC_SHORT_GID_T はサポートされません。

    • _LARGEFILE オフセットが使用されます。 off_tは 64 ビットになります。

    • ファイル番号を示す型 ino_tは, unsigned intクォドワード (64 ビット) です。以前は, unsigned shortでした。

    • デバイス ID を示す型 dev_tは, unsigned intクォドワード (64 ビット) です。以前は,32 ビットの文字ポインタでした。新しい型は算術型であるため,標準に準拠しています。

    • blksize_tおよび blkcnt_tが追加されました。 unsigned intクォドワード (64 ビット) として定義されています。

  • 構造体メンバの変更

    • struct statに 2 つのメンバが追加されました。

      blksize_t   st_blksize; 
      blkcnt_t    st_blocks; 
      


      X/Open 標準によれば, st_blksizeは,指定したファイルに対するファイル・システム固有の優先入出力ブロック・サイズです。 OpenVMS システムでは, st_blksizeにはデバイス・バッファ・サイズにディスク・クラスタ・サイズを掛けた値が設定されます。 st_blocksには,ファイルの割り当てサイズがブロック単位で設定されます。 st_blocksを計算するために使用するブロック・サイズは,必ずしも st_blksizeと同じである必要はなく,ほとんどの場合違った値になります。

    • struct statでは,メンバ st_inoの型は ino_tです。以前のバージョンの C RTL では,型は ino_t [3]( ino_t型の 3 つの配列) でした。 ino_tがワードからクォドワードに変更されたため,このメンバのサイズが 1 ワード拡大されました。この変更の主なポイントは,ほとんどのオープン・ソース・アプリケーションと同じく, st_inoがスカラになる点です。

    • ino_tの定義が新しくなったことで,ヘッダ・ファイル <dirent.h>をインクルードしているアプリケーションにも影響があります。 <stat.h>では, struct statst_inoメンバと同様に, struct direntd_inoも変更となります

    • ino_tを構成する値へのアクセスを容易にするために,どの標準にもないマクロが <stat.h>にいくつか追加されました。
      S_INO_NUM(ino),S_INO_SEQ(ino),S_INO_RVN(ino) は,それぞれ ino の FILES-11 ファイル番号,シーケンス番号,相対ボリューム番号を unsigned shortとして返します。

      S_INO_RVN_RVN(ino) は,相対ボリューム番号を含む RVN フィールドのバイトを返します。

      S_INO_RVN_NMX(ino) は,ファイル番号拡張を含む RVN フィールドのバイトを返します。

      このようにして各要素を切り出すことが可能ですが, X/Open 標準の一部ではないため,ポータビリティを確保したいアプリケーションでは使用しないことをお勧めします。

  • 意味の変更
    dev_t型の値は,デバイスごとにクラスタ全体で一意となりました。デバイス名と割り当てクラスまたは SCSSYSTEMID (シングル・パスのデバイスの場合) に基づくアルゴリズムにより, X/Open 標準の要件である,このような特性を持ったデバイス ID が計算されます。一般に,ファイル番号とデバイス ID の組み合わせにより,クラスタ内のファイルが一意に識別されます。
    この変更により, stat構造体のメンバ st_devst_rdevに影響があります。以前のリリースとの互換性のため, st_rdevには 0 または st_devが設定されます。

注意 (Integrity, Alpha)

OpenVMS Alpha システムと OpenVMS Integrity システムでは, statfstatutime,および utimes関数は,新しいファイル・システムの POSIX 準拠のファイル・タイムスタンプ・サポートに対応して拡張されています。

このサポートは,V7.3 およびそれ以降の OpenVMS Alpha システム上の ODS-5 デバイスでのみ使用できます。

この変更が行われる以前, statおよび fstat関数は,以下のファイル属性に基づいて st_ctimest_mtime,および st_atimeフィールドの値を設定していました。

st_ctime- ATR$C_CREDATE (ファイル作成時刻)
st_mtime- ATR$C_REVDATE (ファイル更新時刻)
st_atime- ファイル・アクセス時刻がサポートされていなかったため,常に st_mtime に設定されていた

また,ファイル変更時刻については, utimeおよび utimesは ATR$C_REVDATE ファイル属性を変更し,ファイル・アクセス時刻引数は無視していました。

変更が行われて以降,ODS-5 デバイス上のファイルに関しては, statおよび fstat関数は,以下の新しいファイル属性に基づいて st_ctimest_mtime,および st_atimeフィールドの値を設定するようになりました。

st_ctime- ATR$C_ATTDATE (最終属性変更時刻)
st_mtime- ATR$C_MODDATE (最終データ変更時刻)
st_atime- ATR$C_ACCDATE (最終アクセス時刻)

ODS-2 デバイスのように ATR$C_ACCDATE がゼロである場合, statおよび fstat関数は st_atimest_mtimeに設定します。

ファイル変更時刻については, utimeおよび utimes関数は, ATR$C_REVDATE と ATR$C_MODDATE の両方のファイル属性を変更します。ファイル・アクセス時刻については,これらの関数は ATR$C_ACCDATE ファイル属性を変更します。 ODS-2 デバイス上で ATR$C_MODDATE および ATR$C_ACCDATE ファイル属性を設定しても効果はありません。

互換性を保つために,デバイスの種類にかかわらず, statfstatutime,および utimesの以前の動作がデフォルトとなっています。

新しい動作を有効にするためには,アプリケーションを呼び出す前に, DECC$EFS_FILE_TIMESTAMPS 論理名に明示的に ENABLE を定義する必要があります。この論理名を設定しても, ODS-2 デバイス上のファイルに対する statfstatutime,および utimesの動作には影響はありません。


戻り値

0 成功を示します。
-1    特権違反以外のエラーを示します。 errno はエラーを示す値に設定されます。
-2    特権違反を示します。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.