Dosyaları oluşturmakta kullanılan
open veya
mkdir gibi ilkel işlevler yeni oluşturulacak dosyaya atanacak dosya izinlerini belirleyen bir
kip argümanı alırlar. Bu kip kullanılmadan önce sürecin
dosya oluşturma maskesi ya da
umask ile değişikliğe uğratılır.
Dosya oluşturma maskesinde izinleri ifade eden bitler yeni oluşturulan dosyalar için iptal edilecek izinleri belirtir. Örneğin, maskede diğerlerine bütün erişim izinleri verilmişse, diğer kategorisindeki hiçbir süreç bu dosyaya erişemeyecektir; dosyayı oluşturan işlevin kip argümanında diğerlerine tüm erişim izinleri verilimiş olsa bile! Başka bir deyişle dosya oluşturma maskesi vermek istediğiniz erişim izinlerinin tümleyenidir.
Dosya oluşturan yazılımlar genellikle kip argümanında herkese tüm izinleri veren bir değer belirtirler. Normal bir dosya için bu herkese okuma ve yazma izinleri vermek şeklindedir. Daha sonra dosya oluşturulurken bu izinler kullanıcının dosya oluşturma maskesi kullanılarak sınırlanır.
İsmini belirterek mevcut bir dosyanın izinlerini değiştirmek için
chmod işlevi kullanılır. Bu işlev belirtilen izinleri kullanırken dosya oluşturma maskesini yoksayar.
Normal kullanımda, dosya oluşturma maskesi kullanıcının oturum açma kabuğu tarafından (
umask kabuk komutu ile) ilklendirilir ve tüm alt süreçler tarafından miras alınır. Uygulama yazılımları dosya oluşturma maskesi için normalde endişelenmezler. Onun özdevinimli oluşturulduğu kabul edilir.
Yazılımınızın, bir dosyanın, dosya oluşturma maskesini yoksayarak erişim izinlerini belirlemesini istiyorsanız bunun en kolay yolu dosyayı açtıktan sonra dosya oluşturma maskesini değiştirmek yerine, fchmod işlevini kullanmaktır. Aslında, dosya oluşturma maskesini değiştirme işlemi sadece kabuk tarafından yapılır. Kabuk bunu umask işlevini kullanarak yapar.
Bu bölümdeki işlevler
sys/stat.h başlık dosyasında bildirilmiştir.
mode_t umask | (mode_t maske) |
işlev
umask işlevi çağrıldığı sürecin dosya oluşturma maskesini maske yapar ve önceki dosya oluşturma maskesi ile döner.
Bu örnekte, dosya oluşturma maskesinin kalıcı olarak değiştirilmeksizin umask ile nasıl okunacağı gösterilmiştir:
mode_t
read_umask (void)
{
mode_t mask = umask (0);
umask (mask);
return mask;
}
Ancak, maske değerini sadece okumak istiyorsanız getumask işlevini kullanmak daha iyidir, çünkü bu işlev evreseldir (en azından GNU sisteminde).
Çağrıldığı sürecin dosya oluşturma maskesi ile döner. Bu işlev bir GNU oluşumudur
int chmod | (const char *dosyaismi,
mode_t kip) |
işlev
chmod işlevi, ismi dosyaismi ile belirtilen dosyanın erişim izinlerini kip ile belirtilen değere ayarlar.
dosyaismi bir sembolik bağ ise, chmod bağın değil, bağın hedefindeki dosyanın izinlerini değiştirir.
İşlev başarılı olduğunda
0, aksi takdirde
-1 ile döner.
Dosya ismi hatalarına ek olarak aşağıdaki
errno hata durumları bu işlev için tanımlanmıştır:
- ENOENT
Belirtilen dosya yok.
- EPERM
Bu sürecin, bu dosyanın erişim izinlerini değiştirme izni yok. Sadece dosyanın sahibi (sürecin etkin kullanıcı kimliğinden saptanır) ya da ayrıcalıklı kullanıcı onları değiştirebilir.
- EROFS
Dosya salt-okunur bağlı bir dosya sistemi üzerinde.
-
EFTYPE
kip argümanı S_ISVTX bitini ("yapışkan bit") içeriyor ama ismi belirtilen dosya bir dizin değil. Bazı dosya sistemlerinde yapışkan bitin dosyalara verilmesine izin verilirken bazılarında da verilmez (sadece dizinlerde izin verilir).
EFTYPE hatasını sadece yapışkan bitin dizinler dışında anlamlı olmadığı dosya sistemlerinde alırsınız. Bu olduğu takdirde, yapışkan biti içermeyen bir
kip değeri ile tekrar
chmod çağrısı yapın. Yapışkan bit ile ilgili daha ayrıntılı bilgi edinmek için
Erişim İzinleri için Kip Bitleri bölümüne bakınız.
int fchmod | (int dosyatanıtıcı,
int kip) |
işlev
Bu işlev argüman olarak dosya ismi yerine bir
açık dosya tanıtıcı alması dışında
chmod işlevinin benzeridir.
İşlev başarılıysa 0 ile değilse -1 ile döner. Aşağıdaki errno hata durumları bu işlev için tanımlanmıştır:
- EBADF
dosyatanıtıcı argümanı geçerli bir dosya tanıtıcı değil.
- EINVAL
dosyatanıtıcı argümanı bir boru veya soket ya da erişim izinlerine konu olmayan bir şeye ait.
- EPERM
Bu sürecin dosyanın izinlerini değiştirme yetkisi yok. Sadece dosyanın sahibi (sürecin etkin kullanıcı kimliğinden saptanır) ya da ayrıcalıklı kullanıcı izinleri değiştirebilir.
- EROFS
Dosya salt-okunur bağlı bir dosya sisteminde bulunuyor.