File Descriptors
File Descriptors konusuna değinilen kısım.
File Descriptors Nedir?
File Descriptor, dosyalarla veya diğer giriş/çıkış kaynaklarıyla (örneğin, soketler, borular vb.) etkileşim kurmak için kullanılan bir ifadedir. Bu dosya tanımlayıcıları, işletim sistemi tarafından yönetilir ve genellikle tam sayılarla temsil edilirler. Standart giriş (stdin), standart çıkış (stdout) ve standart hata (stderr) gibi özel dosyalar da dosya tanımlayıcıları aracılığıyla temsil edilir.
3 adet standart dosya tanımlayıcısı vardır;
Stdin(0): Klavyeden bir veri girişi sağlandığında bunu okuyan yerdir. Örneğin,
scanf()
fonksiyonu standart girişi kullanarak kullanıcıdan girdi alır.Stdout(1): Ekrana bir çıktı yazıldığında bunu yazdıran yerdir. Örneğin,
printf()
fonksiyonu standart çıkışı kullanarak veriyi ekrana yazdırır.Stderr(2): Ekrana bir çıktı yazıldığında bunu yazdıran yerdir ancak hata mesajlarını veya hata bilgilerini bir hata günlüğüne veya başka bir çıkışa yönlendirir.
Genel olarak hata mesajları ve buna benzer işler stderr
'e verilmelidir. Bunun nedeni stdout
çıkışı bazı durumlarda meşgul olabilir bu yüzden ekrana yazdırmak istenilen şeyin yazdırılması işlem önceliğini baz alarak geç olabilir veya hiç olmayabilir. Bu yüzden farklı bir çıkış ile örneğin hata mesajlarını ekrana yazdırmak için stderr
kullanılması önerilir.
Örneğin write()
fonksiyonunun ilk parametresi bir fd
dosya tanımlayıcısı alır. Bu parametreye argüman olarak genellikle stdout
yani 1
verilir. Bu yüzden verdiğimiz argüman ekrana yazdırılır. Ancak bu parametreye stderr
yani 2
veya bir dosyaya yazdırılacaksa şayet verilen argüman o halde o dosyanın fd
'si verilmelidir. Bu sayede yazdırılmak istenen argüman dosyaya yazılır.
Burada write()
fonksiyonu aracılığıyla 2 argüman standart çıkışa ve err'e verildiğinden ekrana yazdırıldı. Ancak diğeri bir standart dosya tanımlayıcısı olmadığından yazdırılamadı.
Input/Output System Calls
Temel olarak toplam 5 tip G/Ç sistem çağrısı vardır;
Create(): Bu fonksiyon yeni bir boş dosya oluşturmak için kullanılır.
Parametreleri:
filename: oluşturmak istenilen dosyanın adı
mode: yeni dosyanın izinlerini gösterir.
Dosya izinleri mode_t
;
Kaynak ve fazlası için: Gist
Dönüş Değeri:
ilk kullanılmayan dosya tanımlayıcıyı döndür (0, 1, 2 fd ayrılmış olduğundan, süreçte ilk kullanım oluşturulurken genellikle 3 verilir)
hata oluştuğunda -1 değerini döndür
Open(): Bu fonksiyon, dosyayı okumak, yazmak veya her ikisi için de açmak için kullanılır. Ayrıca mevcut değilse dosyayı oluşturma yeteneğine de sahiptir.
Parametreleri:
Path: açmak istediğimiz dosyanın yolu/adı.
flags: dosyanın nasıl açılmasını istediğinizi belirtmek için bayraklar kullanılır.
Aşağıda ki bayraklar kullanabilir;
Bayraklar | Açıklama |
---|---|
O_RDONLY | Dosyayı salt 'read-only' modunda açar. |
O_WRONLY | Dosyayı salt 'write-only' modunda açar. |
O_RDWR | Dosyayı okuma ve yazma modunda açar. |
O_CREAT | Mevcut değilse bir dosya oluşturun. |
O_EXCL | Zaten mevcutsa, oluşturulmasını engelleyin. |
O_ APPEND | Dosyayı açar ve imleci içeriğin sonuna yerleştirir. |
O_ASYNC | Sinyale göre giriş ve çıkış kontrolünü etkinleştirin. |
O_CLOEXEC | Açık dosyada yakın yürütme modunu etkinleştirin. |
O_NONBLOCK | Açılan dosyanın engellenmesini devre dışı bırakır. |
O_TMPFILE | Belirtilen yolda adsız bir geçici dosya oluşturun. |
Dönüş Değeri:
Dosyayı açtıysa o dosyanın
fd
'sini dosya tanımlayıcısını döndürür.Dosyayı açamama ve hata durumlarında
-1
değerini döndürür.
Read(): dosya tanıtıcısı
fd
tarafından belirtilen dosyadan, read() işlevi,buf
ile gösterilen bellek alanına belirtilen miktardaki byte kadar(cnt)
okur.
Parametreleri:
fd: verinin okunacağı dosyanın dosya tanımlayıcısı.
buf: verinin okunacağı tampon
cnt: Okunacak byte (karakter) sayısı
Dönüş Değeri:
başarı durumunda okunan byte sayısı
dosyanın sonuna ulaşıldığında
0
değerini döndürhata durumunda
-1
değerini döndürsinyal kesintisinde
-1
dönüşü
Close(): İşletim sistemine bir dosya tanımlayıcıyla işinizin bittiğini bildirir ve dosya tanımlayıcının işaret ettiği dosyayı kapatır.
Parametreleri:
fd: Kapatmak istediğiniz dosyanın dosya tanımlayıcısı.
Dönüş Değeri:
Başarı durumunda
0
.Hata durumunda
-1
.
Write(): Okunacak bayt sayısı kadar
(cnt)
buf'tan
fd
ile ilişkili dosyaya veya yuvaya yazar.cnt
,INT_MAX'tan
büyük olmamalıdır. Eğercnt
sıfır ise,write()
başka bir işlem yapmaya kalkışmadan basitçe0
değerini döndürür.
Parametreleri:
fd: dosya tanımlayıcı
buf: verinin yazılacağı tampon.
cnt: Okunacak byte (karakter) sayısı.
Dönüş Değerleri:
başarı durumunda üzerine yazılan byte sayısını döndürür.
dosyanın sonuna ulaşıldığında
0
değerini döndürün.hata durumunda
-1
değerini döndürür.sinyal kesintilerinde
-1
döndürür.
Last updated