Giriş
Şu satırı dahil ederiz.
stat yapısı
İçi şöyledir. Bu yapı işletim sistemine göre değişiklik gösterebilir. Alanların isimleri biraz farklılaşıyor ancak temel olarak aynı işi görüyor.
Şöyle kullanırız.
stat() çağrısının döndürdüğü sonuç 0'an faklı ise errno değişkenine ENOENT, ENOTDIR, EACCESS gibi değerler atanır.
ENOTDIR için açıklama şöyle
dizin olup olmadığını kontrol için şöyle yaparız.
Şöyle yaparız.
Şöyle buluruz.
Şu satırı dahil ederiz.
#include <sys/stat.h>
stat() sistem çağrısı Linux'ta çok kullanılır. fstat metodu ile kardeştir.stat yapısı
İçi şöyledir. Bu yapı işletim sistemine göre değişiklik gösterebilir. Alanların isimleri biraz farklılaşıyor ancak temel olarak aynı işi görüyor.
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for filesystem I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};
st_blksize Alanı
Açıklaması şöyle
st_blksize is called "the optimum I/O size" and unrelated to the units used for st_blocks. The optimum I/O size of course is filesystem specific. This is a result from the fast filesystem development from Berlekey in 1981/1982. Before, there was no optimum block size in the available filesystem
st_blocks Alanı
Bu alanın değier HP-UX'te biraz farklı. Açıklaması şöyle
stat metodust_blocks is expressed in units of DEV_BSIZE that indeed is 1024 on HP-UX. DEV_BSIZE is a platform specific constant. Later, when FFS was renamed to UFS, there was a second filesystem in BSD UNIX with different behavior related to indirect blocks and that required this new stat() field.
Şöyle kullanırız.
struct stat info;
stat("test.txt", &info);
Döndürdüğü Sonuçstat() çağrısının döndürdüğü sonuç 0'an faklı ise errno değişkenine ENOENT, ENOTDIR, EACCESS gibi değerler atanır.
ENOTDIR için açıklama şöyle
If it is ENOTDIR then part of the path you provided is not a directory,EACCES için açıklama şöyle
If it's EACCESS then you didn't have read permission on one of the directories in the path and so stat can't give you an answer.ENOENT için açıklama şöyle
ENOENT means "No such file and directory", and is for path operations.stat ve macrolar
dizin olup olmadığını kontrol için şöyle yaparız.
//Test for directory
if(S_ISDIR(info.st_mode))
{
..
}
Normal bir dosya (sembolik link olmayan) olup olmadığını kontrol için şöyle yaparız.//Test for a regular file.
if(S_ISREG(info.st_mode))
{
..
}
Character Device olup olmadığını kontrol için şöyle yaparız.if (S_ISCHR(info.st_mode)) {...}
dosyanın mevcudiyetiŞöyle yaparız.
int file_exist (char *filename)
{
struct stat buffer;
return (stat (filename, &buffer) == 0);
}
en son değişme zamanı - last modification timeŞöyle buluruz.
struct stat info;
stat("test.txt", &info);
printf("%s", ctime(&info.st_mtime));
Hiç yorum yok:
Yorum Gönder