fstat() - ファイルについての状況情報の取得

標準

標準/拡張機能 C/C++ 依存項目

POSIX.1
XPG4
XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#define _POSIX_SOURCE
#include <sys/stat.h>

int fstat(int fildes, struct stat *info);

機能説明

オープン・ファイル記述子 fildes で指定されたファイルについ ての状況情報を取得し、それを info 引数で示されたメモリーの領域 へ保管します。状況情報は、sys/stat.h ヘッダー・ファイルで定義されたように、stat 構造体に戻されます。この構造体のエレメントについては、stat() - ファイル情報の取得に説明があります。
注: 環境変数 _EDC_EOVERFLOW は、z/OS UNIX ファイルの EOVERFLOW 条件の検出に関する fstat() の動作 を制御するために使用できます。デフォルトでは、 info が指す構造体にファイル・サイズを正しく表すことができない場合、 fstat() は EOVERFLOW を設定しません。_EDC_EOVERFLOW が YES に設定された場合、fstat() は オーバーフロー条件を確認します。

z/OS UNIX の大規模ファイルのサポート: AMODE 64 C/C++ アプリケーションの場合は、z/OS UNIX の大規模ファイルが自動的にサポートされます。AMODE 31 C/C++ アプリケーションは、オプション LANGLVL(LONGLONG) を指定してコンパイルされなければなりません。また、ヘッダーがインクルードされる前に _LARGE_FILES フィーチャー・テスト・マクロを定義して、2 GB のサイズより大きい z/OS UNIX ファイルをこの関数が操作できるようにしなければなりません。ファイル・サイズとオフセット・フィールドは、63 ビットの幅に拡張されます。したがって、_LARGE_FILES フィーチャー・テスト・マクロの定義も行うには、ファイルを操作する他のいずれかの関数が必要です。

戻り値

fstat() は、正常終了時には 0 を戻します。

正常に実行されなかった場合、fstat() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EBADF
fildes が、有効なオープン・ファイル記述子ではありません。
EINVAL
info に NULL が入っています。
EIO
XPG4.2 の追加事項: ファイル・システムからの読み取り中に、入出力エラーが発生しました。
EOVERFLOW

ファイル・サイズ (バイト数) またはファイルの割り振られたブロックの数、 またはファイル・シリアル番号を、info が指す構造体に正しく表すことが できません。

注: ラージ・ファイルのサポートが使用不可である場合、fstat() 関数はエラー・コード EOVERFLOW で失敗する可能性があります。環境変数 _EDC_EOVERFLOW がこの動作を制御します。_EDC_EOVERFLOW が YES に設定されている場合、新しい動作が使用されます。_EDC_EOVERFLOW のデフォルトは NO です。

CELEBF47
⁄* CELEBF47

   This example gets status information for the file called temp.file.

 *⁄
#define _POSIX_SOURCE
#include <fcntl.h>
#include <sys⁄types.h>
#include <sys⁄stat.h>
#include <unistd.h>
#undef _POSIX_SOURCE
#include <stdio.h>
#include <time.h>

main() {
  char fn[]="temp.file";
  struct stat info;
  int fd;

  if ((fd = creat(fn, S_IWUSR)) < 0)
    perror("creat() error");
  else {
    if (fstat(fd, &info) != 0)
      perror("fstat() error");
    else {
      puts("fstat() returned:");
      printf("  inode:   %d¥n",   (int) info.st_ino);
      printf(" dev id:   %d¥n",   (int) info.st_dev);
      printf("   mode:   %08x¥n",       info.st_mode);
      printf("  links:   %d¥n",         info.st_nlink);
      printf("    uid:   %d¥n",   (int) info.st_uid);
      printf("    gid:   %d¥n",   (int) info.st_gid);
      printf("created:   %s",           ctime(&info.st_createtime));
    }
    close(fd);
    unlink(fn);
  }
}
出力:
fstat() returned:
  inode:   3057
 dev id:   1
   mode:   03000080
  links:   1
    uid:   25
    gid:   500
created:   Fri Jun 16 16:03:16 2006

関連情報