Bir Dosyanın Türünün Sınanması
Önceki Dosya Öznitelikleri Sonraki
Bir Dosyanın Türünün Sınanması
Dosya kipi, dosya özniteliklerinin st_mode alanında saklanır ve iki çeşit bilgi içerebilir: dosya türü kodu ve erişim izin bitleri. Bu bölümde sadece bir dosyanın dizin mi, soket mi, sembolik bağ mı her ne haltsa belirlenmesine yarayan tür kodları açıklanacaktır. Erişim izinleri Erişim İzinleri için Kip Bitleri bölümünde açıklanmıştır.
Dosya kipi içindeki dosya türü bilgisine erişmenin iki yolu vardır. İlkinde, belirtilen dosya kipini okuyup dosya türünün kendinin ifade etttiği türde olup olmadığı hakkında bilgi veren isnat makroları vardır. İkinci yolla ise, dosya kipini bir mask ile süzüp sadece dosya türü kodunu bıraktıktan sonra bunu desteklenen dosya türü sabitleriyle karşılaştırarak dosya türü saptanır.
Bu bölümdeki tüm semboller sys/stat.h başlık dosyasında bildirilmiştir. Aşağıdaki isnat makroları, bakılacak dosya için stat tarafından döndürülen st_mode alanındaki değer olan m değerine göre dosya türünü sınar:
int S_ISDIR
(mode_t m)
makro
Dosya bir dizin ise bu makro sıfırdan farklı bir değer döndürür.
int S_ISCHR
(mode_t m)
makro
Dosya bir karakter aygıtı dosyası (örn, uçbirim aygıtı) ise bu makro sıfırdan farklı bir değer döndürür.
int S_ISBLK
(mode_t m)
makro
Dosya bir blok aygıtı dosyası (örn, bir disk bölümü) ise bu makro sıfırdan farklı bir değer döndürür.
int S_ISREG
(mode_t m)
makro
Dosya bir normal dosya ise bu makro sıfırdan farklı bir değer döndürür.
int S_ISFIFO
(mode_t m)
makro
Dosya bir FIFO ya da boru ise bu makro sıfırdan farklı bir değer döndürür. Bkz. Borular ve FIFOlar.
int S_ISLNK
(mode_t m)
makro
Dosya bir sembolik bağ ise bu makro sıfırdan farklı bir değer döndürür. Bkz. Sembolik Bağlar.
int S_ISSOCK
(mode_t m)
makro
Dosya bir soket ise bu makro sıfırdan farklı bir değer döndürür. Bkz. Soketler.
BSD uyumluluğu için, desteklenen dosya türünü sınayan ve POSIX olmayan bir yöntem daha vardır. Dosya türü kodunu elde etmek için kip S_IFMT ile bit seviyesinde VE'lenir ve ilgili sabitle karşılaştırılır. Örneğin,
S_ISCHR (kip)
ifadesi ile
((kip  S_IFMT) == S_IFCHR)
ifadesi eşdeğerdir.
int S_IFMT
makro
Bir kip değerinden dosya türünü çıkarmak için kullanılan bir bit maskesidir.
Dosya türü kodlarının sembolik isimleri:
S_IFDIR
Bir dizin dosyasının dosya türü sabitidir.
S_IFCHR
Bir karakter aygıtı dosyasının dosya türü sabitidir.
S_IFBLK
Bir blok aygıtı dosyasının dosya türü sabitidir.
S_IFREG
Bir normal dosyanın dosya türü sabitidir.
S_IFLNK
Bir sembolik bağın dosya türü sabitidir.
S_IFSOCK
Bir soketin dosya türü sabitidir.
S_IFIFO
Bir FIFO veya borunun dosya türü sabitidir.
POSIX.1b standardı, dosya sisteminde nesne olarak gerçeklenebilmesi olası bir kaç nesneden daha bahseder. Bunlar ileti kuyrukları, semaforlar ve paylaşımlı bellek nesneleridir. Bu nesnelerin diğer dosyalardan ayrımsanmasını mümkün kılmak için POSIX standardı üç yeni makrodan bahseder. Fakat diğer makroların aksine, parametre olarak st_mode alanının değerini almazlar. Bunun yerine struct stat yapısının tamamı için bir gösterici alırlar.
int S_TYPEISMQ
(struct stat *s)
makro
Eğer sistem, POSIX ileti kuyruklarını ayrı nesneler olarak gerçekleştiriyorsa ve dosya bir ileti kuyruğu nesnesi ise, bu makro sıfırdan farklı bir değerle döner. Tüm diğer durumlarda sonuç sıfırdır.
int S_TYPEISSEM
(struct stat *s)
makro
Eğer sistem, POSIX semaforlarını ayrı nesneler olarak gerçekleştiriyorsa ve dosya bir semafor nesnesi ise, bu makro sıfırdan farklı bir değerle döner. Tüm diğer durumlarda sonuç sıfırdır.
int S_TYPEISSHM
(struct stat *s)
makro
Eğer sistem, POSIX paylaşımlı bellek nesnelerini ayrı nesneler olarak gerçekleştiriyorsa ve dosya bir paylaşımlı bellek nesnesi ise, bu makro sıfırdan farklı bir değerle döner. Tüm diğer durumlarda sonuç sıfırdır.
Önceki Üst Ana Başlık Sonraki
Bir Dosyanın Özniteliklerinin Okunması Başlangıç Dosya İyeliği
Bir Linux Kitaplığı Sayfası