lstat()、変更の始まりlstat64()変更の終わり — ファイル/シンボリック・リンクの状況の取得

標準

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

z/OS®UNIX
XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

変更の始まりlstat:変更の終わり
#define _POSIX1_SOURCE 2
#include <sys/stat.h>

int lstat(const char *__restrict__ pathname, struct stat *__restrict__ buf);
変更の始まりlstat64:変更の終わり変更の始まり
#define _LARGE_TIME_API
#define _POSIX1_SOURCE 2
#include <sys/stat.h>

int lstat64(const char *__restrict__ pathname, struct stat64 *__restrict__ info);
変更の終わり

変更の始まりコンパイル要件: lstat64 関数を使用するには、long long データ型が必要です。 long long データ型を使用可能にする方法について詳しくは、「z/OS XL C/C++ ランゲージ・リファレンス」を参照してください。変更の終わり

機能説明

指定ファイルに関する状況情報を取得し、これを buf 引数で示されたメモリーのエリアに入れます。ファイル自身上での許可は必要ありませんが、pathname のすべてのディレクトリー・コンポーネント上での検索許可を持っ ていなければなりません。

指定されたファイルがシンボリック・リンクの場合、lstat() は、シンボリック・リンク自身についての情報を戻します。

変更の始まりlstat64() 関数は lstat() とまったく同様に動作しますが、lstat64() は構造体 stat の代わりに stat64 を使用して 2038 年 1 月 19 日の 03:14:07 UTC を超える時間をサポートする点が異なります。変更の終わり

情報は、sys/stat.h ヘッダー・ファイルに定義されたように、以下の stat および 変更の始まりstat64変更の終わり 構造体へ戻されます。

表 1. stat 変更の始まりおよび stat64変更の終わり構造体に戻される値
stat の値 変更の始まりstat64 の値変更の終わり 説明
mode_t st_mode 変更の始まりmode_t st_mode変更の終わり シンボルの許可および特権を示すビット・ストリングは 、sys/stat.h ヘッダー・ファイルで定義され、mode_t 値のビットを参照します。これらのシンボルは、chmod() - ファイルまたはディレクトリーのモードの変更 にリスト表示されています。
ino_t st_ino 変更の始まりino_t st_ino変更の終わり ファイルの通し番号。
dev_t st_dev 変更の始まりdev_t st_dev変更の終わり ファイルを含む装置の数値 ID。
nlink_t st_nlink 変更の始まりnlink_t st_nlink変更の終わり ファイルへのリンク数。
uid_t st_uid 変更の始まりuid_t st_uid変更の終わり ファイル所有者の数値ユーザー ID (UID)。
gid_t st_gid 変更の始まりgid_t st_gid変更の終わり ファイル・グループの数値グループ ID (GID)。
off_t st_size 変更の始まりlong long st_size 変更の終わり 通常のファイルでは、ファイルのサイズ (バイト)。その他の種類のファイルの場合には、このフィールドの値は未指定です。
time_t st_atime 変更の始まりtime64_t st_atime変更の終わり ファイルにアクセスが行われた最新時刻。
time_t st_ctime 変更の始まりtime64_t st_ctime変更の終わり ファイルの状況が変更された最新時刻。
time_t st_mtime 変更の始まりtime64_t st_mtime変更の終わり ファイルの内容が変更された最新時刻。

time_t および 変更の始まりtime64_t変更の終わり の値は、エポックから経過した秒数で与えられます。

指定されたファイルがシンボリック・リンクの場合、lstat() は、stat 構造体へ情報を入れる前に、時間関連フィールドを更新します。

sys/modes.h ヘッダー・ファイルで定義されているマクロのコレクションを使用して、st_mode フィールドから mode_t 値の特性を確認できます。mode が stat 構造体からの mode_t 値で、genvalue が stat 構造体からの unsigned int 値の場合には、以下のようになります。
S_ISBLK(mode)
ブロック特殊ファイルに対してゼロ以外です。
S_ISCHR(mode)
文字特殊ファイルに対してゼロ以外です。
S_ISDIR(mode)
ディレクトリーに対してゼロ以外です。
S_ISEXTL(mode,genvalue)
外部リンクに対してゼロ以外です。
S_ISFIFO(mode)
パイプおよび FIFO 特殊ファイルに対してゼロ以外です。
S_ISLNK(mode)
シンボリック・リンクに対してゼロ以外です。
S_ISREG(mode)
通常のファイルに対してゼロ以外です。
S_ISSOCK(mode)
ソケットに対してゼロ以外です。

lstat() は、このすべての情報を正常に判別すると、それらの値を buf 引数で示された領域に保管します。

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

戻り値

正常に実行された場合、lstat() は 0 を戻します。

正常に実行されなかった場合、lstat() は -1 を戻して、errno を次のいずれかの値に設定します。
エラー・コード
説明
EACCES
プロセスに、pathname 接頭部の一部のコンポーネントの検索許可がありません。
EINVAL
buf に NULL が入っています。
EIO
XPG4.2 の追加事項: ファイル・システムからの読み取り中に、入出力エラーが発生しました。
ELOOP
ループがシンボリック・リンクに存在しています。このエラーは、pathname 引数の解析中に検出されたシンボリック・ リンクの数が POSIX_SYMLOOP より大きい場合に発生します。
ENAMETOOLONG
_POSIX_NO_TRUNC が有効ですが、pathnamePATH_MAX 文字より長いか、または pathname の一部のコンポーネントが NAME_MAX 文字より長くなっています。シンボリック・リンクの場合、シンボリック・リンクの代替となる pathname ストリングの長さが PATH_MAX を超えています。PATH_MAXNAME_MAX の値は、pathconf() を使用して確認できます。
ENOENT
pathname という名前のファイルが存在しないか、または pathname が空ストリングです。
ENOTDIR
pathname の接頭部のコンポーネントが ディレクトリーではありません。
EOVERFLOW
ファイル・サイズ (バイト数) またはファイルの割り振られたブロックの数、またはファイル・シリアル番号を、buf が指す構造体に正しく表すことができません。
注: z/OS V1.9 以降、環境変数 _EDC_EOVERFLOW は、z/OS UNIX ファイルの EOVERFLOW 条件の検出に関する lstat() の動作を制御するために使用できます。デフォルトでは、buf が指す構造体にファイル・サイズを正しく表すことができない場合、lstat() は EOVERFLOW を設定しません。_EDC_EOVERFLOW が YES に設定された場合、lstat() はオーバーフロー条件を確認します。

CELEBL12
/* CELEBL12

   This example provides status information for a 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", ln[]="temp.link";
  struct stat info;
  int fd;

  if ((fd = creat(fn, S_IWUSR)) < 0)
    perror("creat() error");
  else {
    close(fd);
    if (link(fn, ln) != 0)
      perror("link() error");
    else {
      if (lstat(ln, &info) != 0)
        perror("lstat() error");
      else {
        puts("lstat() 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));
      }
      unlink(ln);
    }
    unlink(fn);
  }
}
出力:
lstat() returned:
  inode:   3022
 dev id:   1
   mode:   03000080
  links:   2
    uid:   25
    gid:   500
created:   Fri Jun 16 15:00:00 2006