Üye Kayıt Üye Giriş

stat ve fstat Fonksiyonları


stat ve fstat Fonksiyonları

Bu fonksiyonlar ismi ya da handle değeri bilinen bir dosyanın bilgilerini elde etmek için
kullanılırlar. Bu fonksiyonların prototipleri sys/stat.h dosyası içerisindedir. Ancak bu
fonksiyonları kullanırken çeşitli typedef isimlerine de gereksinim duyulur. Bu tür isimleri
sys/types.h içerisinde belirtilmiştir. Bu nedenle bu fonksiyonları kullanabilmek için bu iki
dosya include edilmelidir.


int stat(const char *path, struct stat *buf);
int fstat(int filedes, struct stat *buf);


Bu iki fonksiyon da tamamen aynı işlemleri yapar. stat fonksiyonu dosyanın path bilgisi ile
fstat handle değeri ile çalışır. Yani fstat fonksiyonunu kullanabilmek için önce dosyanın aşağı
seviyeli open fonksiyonu ile açılmış olması gerekir. Fonksiyonlar başarı durumunda 0
değerine, başarısızlık durumunda –1 değerine geri dönerler ve errno set edilir. stat isimli yapı
C ve Sistem Programcıları Derneği 16
sys/stat.h içerisinde bildirilmiştir. Fonksiyonların ikinci parametresi bu türden bir yapı
nesnesinin adresini alır.


Bilgisi elde edilecek dosya bilgiyi elde etmek isteyen process’e erişim bakımından kapalı olsa
bile yine dosya bilgileri elde edilir. Yani dosya r ve w özellikleri ile erişime kapalı olsa bile
yine de bilgileri elde edilir. Ancak dosya hangi dizinin içerisindeyse o dosyaya giden path
ifadesindeki dizinlerin erişecek process için x haklarının olması gerekir. stat yapısının
elemanları şu anlamları içerir:


1) dev_t st_dev:
dev_t türü genellikle unsigned short int biçimindedir ve dosya bir aygıt dosyası ise onun
numarasını belirtir.


2) ino_t st_ino:
ino_t unsigned long int türündendir ve dosyanın inode numarasını barındırır.


3) mode_t st_mode:
Bu dosyanın bildiğimiz rwx erişim haklarıdır. mode_t unsigned short türündendir. Bu eleman
aynı zamanda ilgili dosyanın türünü belirlemek için de kullanılır.


4)
nlink_t st_nlink:
nlink_t genellikle unsigned short türündendir. Burada dosyanın toplam link sayısı vardır.


5) uid_t st_uid:
uid_t unsigned short türündendir. Dosyanın kullanıcı ID’sini belirtir.


6) gid_t st_gid:
Dosyanın erişim testinde kullanılan grup ID değerini verir. gid_t unsigned short türündendir.


7) dev_t st_rdev:
Özel dosyalar için aygıt numarasını verir.


8) off_t st_size:
off_t long türündendir. Bu eleman dosyanın byte uzunluğunu verir.


9) long st_blksize:
Bu eleman dosya için tahsis edilecek en iyi blok büyüklüğünü belirtir.


10) long st_blocks:
Bu eleman dosya için tahsis edilen toplam blok sayısını içerir.


11) time_t st_atime, st_mtime, st_ctime:
POSIX dosya sisteminde dosya zamanına ilişkin burada belirtilen üç bilgi ayrı ayrı tutulur.
Sırası ile bu zamanlar en son erişim zamanı, en son değiştirme zamanı ve dosya durumunun
en son değiştirilme zamanıdır (FAT sisteminde yalnızca en son değiştirme zamanı
tutulmaktadır).


/* mcopy –t /home/student/stat.c a: */
/* stat.c */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
struct stat status;
if (argc != 2) {
fprintf(stderr, "Wrong number of argument");
exit(1);
}
if (stat(argv[1], &status) == -1) {
C ve Sistem Programcıları Derneği 17
perror("stat error");
exit(1);
}
printf("%ld \n", status.st_size);
printf("user ID: %d \n", status.st_uid);
printf("group ID: %d \n", status.st_gid);
return 0;
}

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER