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:
Bu bit varsa ve dosya mevcut değilse oluşturulur.
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.
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.
İ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.
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.
İ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.)
İ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.
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.
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.
flock'un yaptığı gibi dosya üzerinde bir ayrıcalıklı kilit edinilir. Bkz.
Dosya Kilitleri. Bu,
O_SHLOCK'daki gibi atomik yapılır.