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:
Dosya bir dizin ise bu makro sıfırdan farklı bir değer döndürür.
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.
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.
Dosya bir normal dosya ise bu makro sıfırdan farklı bir değer döndürür.
Dosya bir FIFO ya da boru ise bu makro sıfırdan farklı bir değer döndürür. Bkz.
Borular ve FIFOlar.
Dosya bir sembolik bağ ise bu makro sıfırdan farklı bir değer döndürür. Bkz.
Sembolik Bağlar.
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,
ifadesi ile
((kip S_IFMT) == S_IFCHR)
ifadesi eşdeğerdir.
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.