linux stat関数解説(整理)
stat関数解説
ヘッダファイル:
ファイル名filenameでファイル情報を取得し、bufで指す構造体statに保存する。
戻り値:
実行に成功すれば0に戻り、失敗は-1に戻り、エラーコードはerrnoに保存されます。
エラーコード:
ENOENT パラメータfile_name指定のファイルは存在しません。
ENOTDIR パス中のディレクトリは存在しますが、本物のディレクトリではありません。
ELLOOP 開くファイルには多すぎる符号接続問題があります。上限は16シンボル接続です。
EFAULT パラメータbufは無効ポインタで、存在できないメモリ空間を指します。
EACCESS ファイルにアクセスするときに拒否されました。
ENOMEM コアメモリ不足
ENAMETOOLONG パラメータfile_nameのパス名が長すぎます。
S_IFRMT 0170000 ファイルタイプのビットカバー
S_IFSOCK 0140000 scoket
S_IF LNK 0120000 シンボル接続
S_IF REG 0100 0000 一般ファイル
S_IFBLK 0060000 ブロック装置
S_IFRDIR 0040000 目次
S_IF CHR 0020000 文字装置
S_IIF O 001 0000 先入れ先出し
S_ISUID 0400 ファイルの(set user-ind on execution)ビット
S_ISGID 02000 ファイルの(set group-ind on execution)ビット
S_ISVTX 01000 書類のsticky位
S_IREUS(S_)IREAD)00400 ファイル所有者に読み取り可能な権限があります。
S_IWUSR(S_IWRITE)00200 ファイル所有者に書き込み可能な権限があります。
S_IXUSR(S_IEXEC)00100 ファイル所有者に実行可能な権限があります。
S_IGRP 00040 ユーザグループに読み取り可能な権限があります。
S_IWGRP 00020 ユーザグループに書き込み可能権限があります。
S_IXGRP 00010 ユーザグループに実行可能権限があります。
S_IRLT 00004 他のユーザーが読み取り可能な権限を持っています。
S_IWOTH 00002 他のユーザーが書き込み可能な権限があります。
S_IXOTH 00001 他のユーザーは実行可能権限があります。
上記のファイルタイプは、POSIXにおいて、これらのタイプを検査するマクロ定義を定義している。
S_ISLNK(st_モデル シンボル接続かどうかを判断する
S_ISREG(st_モデル 一般ファイルかどうか
S_ISDIR(st_モデル ディレクトリかどうか
S_ISCHR(st_モデル 文字装置ファイルかどうか
S_ISBLK(s 3 e) 先进のために先に出ますか?
S_ISSOCKモデル socketですか
もし一つのディレクトリがsticky位(S_ISVTX)は、このディレクトリの下にあるファイルは、そのファイルの所有者、このディレクトリの所有者またはrootによってのみ削除または改名できるという意味です。
------------------------------------------
3つの関数の戻り:成功すれば0、エラーがあれば-1です。
pathnameを与えられたstat関数は、この名前付きファイルに関する情報構造を返します。fstat関数は、ディスクリプタfiledesで開かれたファイルに関する情報を得ます。lstat関数はstatと似ていますが、名前が付けられたファイルがシンボル接続である場合、lstatはシンボル接続で参照されたファイルの情報ではなく、シンボル接続に関する情報を返します。
第二のパラメータはポインタであり、我々が提供すべき構造を指す。これらの関数はbufが指す構造を記入します。この構造の実際の定義は実装によって異なるかもしれないが、その基本的な形式は以下の通りである。
stat関数を使用すると最も多いのは、ls-lコマンドかもしれません。これで、ファイルに関するすべての情報が得られます。
1関数はファイル(一般ファイル、ディレクトリ、パイプ、socket、文字、ブロック()の属性を取得します。
関数プロトタイプ
2ファイルに対応する属性
以上は小编が皆さんに绍介したlinux stat関数の解说です。皆さんに助けてほしいです。もし何か疑问があれば、メッセージをください。小编はすぐに皆さんに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
ヘッダファイル:
#include <sys/stat.h>
#include <unistd.h>
定義関数:
int stat(const char *file_name, struct stat *buf);
関数の説明: ファイル名filenameでファイル情報を取得し、bufで指す構造体statに保存する。
戻り値:
実行に成功すれば0に戻り、失敗は-1に戻り、エラーコードはerrnoに保存されます。
エラーコード:
ENOENT パラメータfile_name指定のファイルは存在しません。
ENOTDIR パス中のディレクトリは存在しますが、本物のディレクトリではありません。
ELLOOP 開くファイルには多すぎる符号接続問題があります。上限は16シンボル接続です。
EFAULT パラメータbufは無効ポインタで、存在できないメモリ空間を指します。
EACCESS ファイルにアクセスするときに拒否されました。
ENOMEM コアメモリ不足
ENAMETOOLONG パラメータfile_nameのパス名が長すぎます。
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main() {
struct stat buf;
stat("/etc/hosts", &buf);
printf("/etc/hosts file size = %d
", buf.st_size);
}
------------------------------------------
struct stat {
dev_t st_dev; //
ino_t st_ino; //
mode_t st_mode; //
nlink_t st_nlink; // , 1
uid_t st_uid; // ID
gid_t st_gid; // ID
dev_t st_rdev; //( ) ,
off_t st_size; // ( )
unsigned long st_blksize; // ( I/O )
unsigned long st_blocks; //
time_t st_atime; //
time_t st_mtime; //
time_t st_ctime; // ( )
};
前述のst_modeは以下のいくつかの状況を定義しています。S_IFRMT 0170000 ファイルタイプのビットカバー
S_IFSOCK 0140000 scoket
S_IF LNK 0120000 シンボル接続
S_IF REG 0100 0000 一般ファイル
S_IFBLK 0060000 ブロック装置
S_IFRDIR 0040000 目次
S_IF CHR 0020000 文字装置
S_IIF O 001 0000 先入れ先出し
S_ISUID 0400 ファイルの(set user-ind on execution)ビット
S_ISGID 02000 ファイルの(set group-ind on execution)ビット
S_ISVTX 01000 書類のsticky位
S_IREUS(S_)IREAD)00400 ファイル所有者に読み取り可能な権限があります。
S_IWUSR(S_IWRITE)00200 ファイル所有者に書き込み可能な権限があります。
S_IXUSR(S_IEXEC)00100 ファイル所有者に実行可能な権限があります。
S_IGRP 00040 ユーザグループに読み取り可能な権限があります。
S_IWGRP 00020 ユーザグループに書き込み可能権限があります。
S_IXGRP 00010 ユーザグループに実行可能権限があります。
S_IRLT 00004 他のユーザーが読み取り可能な権限を持っています。
S_IWOTH 00002 他のユーザーが書き込み可能な権限があります。
S_IXOTH 00001 他のユーザーは実行可能権限があります。
上記のファイルタイプは、POSIXにおいて、これらのタイプを検査するマクロ定義を定義している。
S_ISLNK(st_モデル シンボル接続かどうかを判断する
S_ISREG(st_モデル 一般ファイルかどうか
S_ISDIR(st_モデル ディレクトリかどうか
S_ISCHR(st_モデル 文字装置ファイルかどうか
S_ISBLK(s 3 e) 先进のために先に出ますか?
S_ISSOCKモデル socketですか
もし一つのディレクトリがsticky位(S_ISVTX)は、このディレクトリの下にあるファイルは、そのファイルの所有者、このディレクトリの所有者またはrootによってのみ削除または改名できるという意味です。
------------------------------------------
struct statfs {
long f_type; //
long f_bsize; //
long f_blocks; //
long f_bfree; //
long f_bavail; //
long f_files; //
long f_ffree; //
fsid_t f_fsid; // id
long f_namelen; //
long f_spare[6]; //spare for later
};
stat、fstat、lstat関数(UNIX)
#include<sys/types.h>
#include<sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf);
ファイル名を提供し、ファイルの対応する属性を取得します。普通はファイルが開いていない時にこのように操作します。
int fstat(int filedes, struct stat *buf);
ファイル記述子からファイルに対応する属性を取得します。ファイルを開いてからこのように操作します。
int lstat(const char *restrict pathname, struct stat *restrict buf);
接続ファイル3つの関数の戻り:成功すれば0、エラーがあれば-1です。
pathnameを与えられたstat関数は、この名前付きファイルに関する情報構造を返します。fstat関数は、ディスクリプタfiledesで開かれたファイルに関する情報を得ます。lstat関数はstatと似ていますが、名前が付けられたファイルがシンボル接続である場合、lstatはシンボル接続で参照されたファイルの情報ではなく、シンボル接続に関する情報を返します。
第二のパラメータはポインタであり、我々が提供すべき構造を指す。これらの関数はbufが指す構造を記入します。この構造の実際の定義は実装によって異なるかもしれないが、その基本的な形式は以下の通りである。
struct stat{
mode_t st_mode; /*file tpye &mode (permissions)*/
ino_t st_ino; /*i=node number (serial number)*/
dev_t st_rdev; /*device number for special files*/
nlink_t st_nlink; /*number of links*/
uid_t st_uid; /*user id of owner*/
gid_t st_gid; /*group ID of owner*/
off_t st_size; /*size in bytes for regular files*/
time_t st_atime; /*time of last access*/
time_t st_mtime; /*time of last modification*/
time_t st_ctime; /*time of last file status change*/
long st_blksize; /*best I/O block size */
long st_blocks; /*number of 512-byte blocks allocated*/
};
なお、最後の2つを除いて、他の各メンバーは基本システムデータタイプである。この構造の各メンバーを説明して、ファイルの属性を理解します。stat関数を使用すると最も多いのは、ls-lコマンドかもしれません。これで、ファイルに関するすべての情報が得られます。
1関数はファイル(一般ファイル、ディレクトリ、パイプ、socket、文字、ブロック()の属性を取得します。
関数プロトタイプ
#include <sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf);
ファイル名を提供し、ファイルの対応する属性を取得します。
int fstat(int filedes, struct stat *buf);
ファイル記述子からファイルに対応する属性を取得します。
int lstat(const char *restrict pathname, struct stat *restrict buf);
ファイルの説明コマンドを接続して、ファイルのプロパティを取得します。2ファイルに対応する属性
struct stat {
mode_t st_mode; // , ,
ino_t st_ino; //inode
dev_t st_dev; //
dev_t st_rdev; //
nlink_t st_nlink; //
uid_t st_uid; //
gid_t st_gid; //
off_t st_size; // ,
time_t st_atime; //
time_t st_mtime; //
time_t st_ctime; //
blksize_t st_blksize; //
blkcnt_t st_blocks; //
};
上記の関数で、構造体を返してファイルの情報を保存します。以上は小编が皆さんに绍介したlinux stat関数の解说です。皆さんに助けてほしいです。もし何か疑问があれば、メッセージをください。小编はすぐに皆さんに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。