Açış Anı Seçenekleri
Önceki Dosya Durum Seçenekleri Sonraki
Açış Anı Seçenekleri
Açış anı seçenekleri open işlevinin davranışlarını etkileyen seçeneklerdir. Bu seçenekler dosya açıldıktan sonra saklanmaz. Buna bir istisna, bir G/Ç işlem kipi de olan O_NONBLOCK seçeneğidir ki, bu seçenek kaydedilir. open çağrılarının nasıl yapıldığı Dosyaların Açılması ve Kapatılması bölümünde anlatılmıştır.
Açış anı seçenekleri iki alt gruba ayrılır.
  • Dosya ismi dönüşüm seçenekleri open işlevinin dosyayı konumlamada dosya ismini nasıl ele alacağını ve dosyanın oluşturulabilir olup olmadığını etkiler.
  • Açış anı eylem seçenekleri open işlevinin dosyanın açılışı anında yapacağı ek işlemleri belirler.
Dosya ismi dönüşüm seçenekleri şunlardır:
int O_CREAT
makro
Bu bit varsa ve dosya mevcut değilse oluşturulur.
int O_EXCL
makro
Hem O_CREAT hem de O_EXCL bitleri varsa ve belirtilen dosya mevcutsa open başarısız olur. Bu mevcut bir dosyanın fütursuzca üzerine yazılmasını engellemeyi garanti eder.
int O_NONBLOCK
makro
open işlevinin dosyanın açılışı sırasında uzun süre beklememesini sağlar. Bu sadece bazı dosya çeşitlerinde anlamlıdır, genelde seri portlar gibi aygıtlarda kullanışlıdır; bu seçeneğin anlamlı olmadığı dosyalarda zararı olmaz ve yoksayılır. Çoğunlukla bir modeme bir port açılması modem taşıyıcıyı saptayana kadar engellenir; O_NONBLOCK etkin olduğunda open taşıyıcıyı beklemeden dönecektir.
O_NONBLOCK seçeneğinin hem G/Ç işlem kipi hem de bir dosya ismi dönüşüm seçeneği olarak belirtilmesi durumunda open işlevi ayrıca beklemeyen G/Ç kipini de etkin kılacaktır. open işlevinin dosyayı açarken beklemesi ama G/Ç işlemleri için beklemeyen kipi etkinleştirmesini istiyorsanız open işlevini O_NONBLOCK etkin olarak çağırmalı ve ardından bir fcntl çağrısı ile bu biti temizlemelisiniz.
int O_NOCTTY
makro
İsimli dosya bir uçbirim aygıtı ise, aygıt sürecin denetim uçbirimi yapılmaz. Denetim uçbiriminin ne anlama geldiği İş Denetimi bölümünde açıklanmıştır.
GNU sisteminde ve 4.4 BSD'de, O_NOCTTY sıfırdır ve bir dosya açılışı aygıtı hiçbir zaman denetim uçbirimi yapmaz; taşınabilirlik önemliyse bundan kaçınmak için O_NOCTTY seçeneğini kullanın.
Aşağıdaki dosya ismi dönüşüm seçenekleri sadece GNU sisteminde geçerlidir.
int O_IGNORE_CTTY
makro
Aygıt sürecin denetim uçbirimi olarak belirlenmiş olsa bile isimli dosya sürecin denetim uçbirimi olarak tanınmaz. Yeni dosya tanıtıcı hiçbir zaman iş denetim sinyallerini içermeyecektir. Bkz. İş Denetimi.
int O_NOLINK
makro
İsimli dosya bir sembolik bağ ise, bağın hedefindeki dosya değil bağın kendisi açılır. (Yeni dosya tanıtıcı ile yapılan fstat çağrısı bağın ismiyle yapılacak bir lstat çağrısından dönecek bilgileri döndürececektir.)
int O_NOTRANS
makro
İsimli dosya özellikle dönüştürülürse, dönüştürücü çağrılmaz. Dönüştürücü onu göreceğinden dosyayı sadece açar.
Açış anı eylem seçenekleri open işlevine aslında dosyanın açılışı ile ilgili olmayan ek işlemleri belirtmek için kullanılır. Bunun ayrı çağrılarla değil de open işlevinin bir parçası olarak yapılmasının sebebi open işlevinin bu işlemleri atomik olarak yapabilmesidir.
int O_TRUNC
makro
Dosyanın uzunluğunu sıfırlar. Bu seçenek dizin veya FIFO gibi özel dosyalarda değil sadece sıradan dosyalarda kullanışlıdır. POSIX.1, bir dosyanın yazma amacıyla açılması için O_TRUNC kullanılmasını gerekli kılar. GNU ve BSD'de dosyayı sıfırlayabilmek için yazma izni olması gerekir ama bunu yapmak için dosyanın yazma amacıyla açılması gerekmez.
Bu POSIX.1 tarafından belirtilmiş tek açış anı eylem seçeneğidir. Dosyanın sıfırlanmasının open tarafından yapılmasının iyi bir sebebi yoksa bunu yapmak yerine open çağrısının hemen ardından ftruncate çağrısı yapın. O_TRUNC seçeneği ftruncate tasarlanmadan önce Unix'de vardı ama artık geriye uyumluluk adına var.
Kalan işlem kipleri BSD oluşumlarıdır. Sadece bazı sistemlerde vardır, diğerlerinde bu makrolar tanımlanmamıştır.
int O_SHLOCK
makro
flock'un yaptığı gibi dosya üzerinde bir paylaşımlı kilit edinilir. Bkz. Dosya Kilitleri.
O_CREAT belirtilmişse,dosya oluşturulurken kilitleme atomik olarak yapılır. Yeni dosyada başka bir sürecin kilitleme yapması mümkün olmaz.
int O_EXLOCK
makro
flock'un yaptığı gibi dosya üzerinde bir ayrıcalıklı kilit edinilir. Bkz. Dosya Kilitleri. Bu, O_SHLOCK'daki gibi atomik yapılır.
Önceki Üst Ana Başlık Sonraki
Dosya Erişim Kipleri Başlangıç G/Ç İşlem Kipleri
Bir Linux Kitaplığı Sayfası