linux C関数のstat関数
linuxC関数のstat関数
1.関数機能:
ファイル名filenameでファイル情報を取得しbufが指す構造体statに保存する
2.関数プロトタイプ
1)ファンクションヘッダファイル
2)関数
3)戻り値:
実行に成功すると0を返し、失敗すると-1を返し、エラーコードはerrnoに保存されます.
エラーコード:
ENOENTパラメータfile_name指定ファイルは存在しません
ENOTDERパスのディレクトリは存在しますが、本物ではありません.
ELOOPが開こうとしているファイルにマルチシンボル接続の問題があり、上限は16シンボル接続
EFAULTパラメータbufは無効なポインタであり、存在しないメモリ領域を指す
EACCESSファイルへのアクセスが拒否されました
ENOMEMコアメモリ不足
ENAMETOOLONGパラメータfile_nameのパス名が長すぎる数値
4)相関構造体
st_mode
Linuxでは、これらのタイプをチェックするマクロ定義が定義されています.
3.stat,fstat,lstat関数の違いと同じ点
1)原型
3つの関数の戻り値は、成功すると0、エラーが発生すると-1です.pathnameが与えられ、stat関数はこのネーミングファイルに関する情報構造を返し、fstat関数は記述子filedesで開いたファイルに関する情報を取得します.lstat関数はstatと似ていますが、名前の付いたファイルがシンボル接続である場合、lstatはシンボル接続で参照されるファイルの情報ではなく、シンボル接続に関する情報を返します.
1.関数機能:
ファイル名filenameでファイル情報を取得しbufが指す構造体statに保存する
2.関数プロトタイプ
1)ファンクションヘッダファイル
#include <sys/stat.h>
#include <unistd.h>
2)関数
int stat(const char *file_name, struct stat *buf )
3)戻り値:
実行に成功すると0を返し、失敗すると-1を返し、エラーコードはerrnoに保存されます.
エラーコード:
ENOENTパラメータfile_name指定ファイルは存在しません
ENOTDERパスのディレクトリは存在しますが、本物ではありません.
ELOOPが開こうとしているファイルにマルチシンボル接続の問題があり、上限は16シンボル接続
EFAULTパラメータbufは無効なポインタであり、存在しないメモリ領域を指す
EACCESSファイルへのアクセスが拒否されました
ENOMEMコアメモリ不足
ENAMETOOLONGパラメータfile_nameのパス名が長すぎる数値
4)相関構造体
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_IFMT 0170000
S_IFSOCK 0140000 scoket
S_IFLNK 0120000
S_IFREG 0100000
S_IFBLK 0060000
S_IFDIR 0040000
S_IFCHR 0020000
S_IFIFO 0010000
S_ISUID 04000 (set user-id on execution)
S_ISGID 02000 (set group-id on execution)
S_ISVTX 01000 sticky
S_IRUSR(S_IREAD) 00400
S_IWUSR(S_IWRITE)00200
S_IXUSR(S_IEXEC) 00100
S_IRGRP 00040
S_IWGRP 00020
S_IXGRP 00010
S_IROTH 00004
S_IWOTH 00002
S_IXOTH 00001
Linuxでは、これらのタイプをチェックするマクロ定義が定義されています.
S_ISLNK (st_mode)
S_ISREG (st_mode)
S_ISDIR (st_mode)
S_ISCHR (st_mode)
S_ISBLK (s3e)
S_ISSOCK (st_mode) socket
3.stat,fstat,lstat関数の違いと同じ点
1)原型
#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はシンボル接続で参照されるファイルの情報ではなく、シンボル接続に関する情報を返します.