標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
z/OS®UNIX |
両方 |
#define _POSIX1_SOURCE 2
#include <sys/stat.h>
int lstat(const char *__restrict__ pathname, struct stat *__restrict__ buf);
指定ファイルに関する状況情報を取得し、これを buf 引数で示されたメモリーのエリアに入れます。ファイル自身上での許可は必要ありませんが、pathname のすべてのディレクトリー・コンポーネント上での検索許可を持っ ていなければなりません。
指定されたファイルがシンボリック・リンクの場合、lstat() は、シンボリック・リンク自身についての情報を戻します。
情報は、sys/stat.h ヘッダー・ファイルに定義されたように、以下の stat 構造体へ戻されます。
構造体 | 説明 |
---|---|
mode_t st_mode | ファイルの許可と特権を示すビット・ストリング。シンボルは、sys/stat.h ヘッダー・ファイルに定義され、mode_t 値内のビットを参照する。これらのシンボルは chmod() - ファイルまたはディレクトリーのモードの変更 にリストされている。 |
ino_t st_ino | ファイルの通し番号。 |
dev_t st_dev | ファイルを含む装置の数値 ID。 |
nlink_t st_nlink | ファイルへのリンク数。 |
uid_t st_uid | ファイル所有者の数値ユーザー ID。 |
gid_t st_gid | ファイル・グループの数値グループ ID。 |
off_t st_size | 通常のファイルでは、ファイルのサイズ (バイト)。シンボリック・リンクの場合は、リンクに含まれているパス名の長さ (末尾の NULL は数えない)。その他の種類のファイルの場合には、このフィールドの値は未指定です。 |
time_t st_atime | ファイルにアクセスが行われた最新時刻。 |
time_t st_ctime | ファイルの状況が変更された最新時刻。 |
time_t st_mtime | ファイルの内容が変更された最新時刻。 |
time_t の値は、エポックから経過した秒数で与えられます。
指定されたファイルがシンボリック・リンクの場合、lstat() は、stat 構造体へ情報を入れる前に、時間関連フィールドを更新します。
lstat() は、このすべての情報を正常に判別すると、それらの値を buf 引数で示された領域に保管します。
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 フィーチャー・テスト・マクロの定義も行うには、ファイルを操作する他のいずれかの関数が必要です。
正常に実行された場合、lstat() は 0 を戻します。
⁄* 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