Anlayabildiğim kadarıyla, bu standart yardımcı programlara kodlanmıştır. Ben stracehem d touchyeni bir dosya oluşturmak ve bir mkdiryeni bir dizin oluşturma.
touchİzlemesi, bu üretilen:
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
ise mkdiriz bu üretilen:
mkdir("newdir", 0777) = 0
C dosya / dizin oluşturma işlemi kodlama kısa, varsayılan izinleri değiştirmek için bir yol görmüyorum. Ancak bana öyle geliyor ki, dosyaları varsayılan olarak yürütülebilir hale getirmemek mantıklıdır: rastgele herhangi bir metnin yanlışlıkla kabuk komutları olarak yanlış yorumlanmasını istemezsiniz.
Güncelleme
İzin bitlerinin standart yardımcı programlara nasıl sabit kodlandığına dair bir örnek vermek için. Aşağıda, coreutilspakette, her ikisi için touch(1)ve mkdir(1)diğerlerinin yanı sıra kaynak kodunu içeren iki dosyadan bazı ilgili satırlar verilmiştir :
mkdir.c:
if (specified_mode)
{
struct mode_change *change = mode_compile (specified_mode);
if (!change)
error (EXIT_FAILURE, 0, _("invalid mode %s"),
quote (specified_mode));
options.mode = mode_adjust (S_IRWXUGO, true, umask_value, change,
&options.mode_bits);
free (change);
}
else
options.mode = S_IRWXUGO & ~umask_value;
}
Başka bir deyişle, mod belirtilmezse, mod S_IRWXUGOtarafından değiştirilen (okuma: 0777) olarak ayarlayın umask_value.
touch.c daha da net:
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
Yani, umaskelbette dosya oluşturma işlemiyle değiştirilecek olan herkese okuma ve yazma izinleri verin (read: 0666) .
Bu programla yalnızca programlı bir şekilde dolaşabilirsiniz: örneğin, sistem çağrılarını doğrudan yaptığınız veya düşük düzeyli bir sistem araması yapmanızı sağlayan bir dilin içinden bir C programı içinden dosya oluştururken (bkz. Örneğin Perl sysopen, perldoc -f sysopen).
umaskTanıştığım tek şey her zaman 0022, varsayılan izin 644 oluşturmaktı.