fstat,stat,_wstat

提供: RAD Studio
移動先: 案内検索

sys\stat.h:インデックス への移動


ヘッダー ファイル

sys\stat.h

カテゴリ

入出力ルーチン

プロトタイプ

int fstat(int handle, struct stat *statbuf);

int stat(const char *path, struct stat *statbuf);

int _wstat(const wchar_t *path, struct _stat *statbuf);

説明

ファイルの情報を取得します。

fstat は、handle に関連付けられたファイルまたはディレクトリについての情報を、stat 構造体に格納します。

stat は、指定されたファイルまたはディレクトリについての情報を、stat/_stat 構造体に格納します。ファイルの名前は path です。

statbuf は、stat/_stat 構造体(sys\stat.h で定義されてる)へのポインタです。この構造体には、次のフィールドがあります:

st_mode

ファイルのモードに関する情報を示すビット マスク

st_dev

ファイルまたはファイル ハンドル(ファイルがデバイス上にある場合)を保有するディスクのドライブ番号

st_rdev

st_dev と同じ

st_nlink

整数定数 1 に設定

st_size

ファイルのサイズ(バイト)

st_atime

最終アクセス時(Windows)、または、最終更新時(DOS)

st_mtime

st_atimeと同じ

st_ctime

st_atimeと同じ



stat 構造体には、さらに 3 つのフィールドがありますが、ここでは省略します。それらには、UNIX でのみ意味のある値が格納されます。

ファイルのモードに関する情報を提供する st_mode ビット マスクには、次のビットが含まれます:

次のいずれかのビットが設定されます:

S_IFCHR

ハンドルがデバイスを参照する場合。

S_IFREG

通常ファイルが、ハンドルによって参照される場合。



次のいずれか、または両方のビットが設定されます:

S_IWRITE

ユーザーが、ファイルへの書き込み権限を持っている場合。

S_IREAD

ユーザーが、ファイルへの読み込み権限を持っている場合。



HPFS および NTFS ファイル管理システムは、次のような違いがあります:

st_atime

最終アクセス時

st_mtime

最終変更時

st_ctime

作成時



戻り値

fstat および stat は、ファイルについての情報の取得に成功した場合は、0 を返します。

エラー時には(情報の取得に失敗した場合)、これらの関数は -1 を返し、グローバル変数 errno を次の値に設定します:

EBADF

不正なファイル処理



#include <sys\stat.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
   struct stat statbuf;
   FILE *stream;
   /* open a file for update */
   if ((stream = fopen("DUMMY.FIL", "w+"))
       == NULL)
   {
      fprintf(stderr, "Cannot open output file.\n");
      return(1);
   }
   fprintf(stream, "This is a test");
   fflush(stream);
   /* get information about the file */
   fstat(fileno(stream), &statbuf);
   fclose(stream);
   /* display the information returned */
   if (statbuf.st_mode & S_IFCHR)
      printf("Handle refers to a device.\n");
   if (statbuf.st_mode & S_IFREG)
      printf("Handle refers to an ordinary file.\n");
   if (statbuf.st_mode & S_IREAD)
      printf("User has read permission on file.\n");
   if (statbuf.st_mode & S_IWRITE)
      printf("User has write permission on file.\n");
   printf("Drive letter of file: %c\n", 'A'+statbuf.st_dev);
   printf("Size of file in bytes: %ld\n", statbuf.st_size);
   printf("Time file last opened: %s\n", ctime(&statbuf.st_ctime));
   return 0;
}