lstat()、
lstat64()
— ファイル/シンボリック・リンクの状況の取得
標準
| 標準/拡張機能 | C/C++ | 依存項目 |
|---|---|---|
z/OS®UNIX |
両方 |
形式
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
構造体へ戻されます。
| 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 構造体へ情報を入れる前に、時間関連フィールドを更新します。
- 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 を戻します。
- エラー・コード
- 説明
- EACCES
- プロセスに、pathname 接頭部の一部のコンポーネントの検索許可がありません。
- EINVAL
- buf に NULL が入っています。
- EIO
- XPG4.2 の追加事項: ファイル・システムからの読み取り中に、入出力エラーが発生しました。
- ELOOP
- ループがシンボリック・リンクに存在しています。このエラーは、pathname 引数の解析中に検出されたシンボリック・ リンクの数が POSIX_SYMLOOP より大きい場合に発生します。
- ENAMETOOLONG
- _POSIX_NO_TRUNC が有効ですが、pathname が PATH_MAX 文字より長いか、または pathname の一部のコンポーネントが NAME_MAX 文字より長くなっています。シンボリック・リンクの場合、シンボリック・リンクの代替となる pathname ストリングの長さが PATH_MAX を超えています。PATH_MAX と NAME_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
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
関連情報
- sys/stat.h — z/OS UNIX ファイルおよびアクセス
- sys/types.h — typedef シンボルおよび構造体
- chmod() - ファイルまたはディレクトリーのモードの変更
- chown() - ファイル/ディレクトリーの所有者またはグループの変更
- creat() - 新規ファイルの作成または既存ファイルの再書き込み
- dup() — オープン・ファイル記述子の複写
- extlink_np() - 外部シンボリック・リンクの作成
- fcntl() - オープン・ファイル記述子の制御
- fstat()、fstat64() — ファイルについての状況情報の取得
- link() - ファイルへのリンクの作成
- mkdir() - ディレクトリーの作成
- mkfifo() - FIFO 特殊ファイルの作成
- open() — ファイルのオープン
- pipe() - 名前の付いていないパイプの作成
- read() - ファイルまたはソケットからの読み取り
- readlink() - シンボリック・リンクの値の読み取り
- remove() - ファイルの削除
- stat()、stat64() — ファイル情報の取得
- symlink() - パス名へのシンボリック・リンクの作成
- unlink() - ディレクトリー項目の除去
- utime()、utime64() — ファイルのアクセス時刻および変更時刻を設定する
- write() - ファイルまたはソケットへのデータの書き込み