Üye Kayıt Üye Giriş

POSIX Dosya Fonksiyonları


POSIX Dosya Fonksiyonları

POSIX fonksiyonları bazı sistemlerde doğrudan sistem fonksiyonu olabilir, bazı sistemlerde
ise sarma fonksiyon olabilir. Örneğin Linux sistemlerinde tipik olarak gerçek sistem
C ve Sistem Programcıları Derneği 29
fonksiyonları 80h kesmesi biçiminde yazılmıştır. 80h kesmesi tipik olarak kesme kapısı
(interrupt gate) içerir. Kesme kapısı yoluyla kod ring3 önceliğinden ring0 önceliğine geçer.
Burada ilk çalışan kod kaç numaralı sistem fonksiyonunun çağırıldığını anlayarak bir
tablodya bakarak uygun fonksiyonu çağırır. Böylece sistem fonksiyonu ring0 modunda
çalıştırılır. Kuşkusuz sistem fonksiyonundan IRET komutu ile geri dönüldüğünde tekrar ring3
düzeyine dönülür. Genel olarak intel tabanlı çalışan işletim sistemlerinde ring0‘da çalışan
kodlar için “kernel mod”, ring3’te çalışan kodlara ise “user mod” denilmektedir.


Anahtar Notlar: Intel işlemcileri korumalı moda geçirildiğinde 4 öncelik
derecelendirilmesiyle işlemler yürütülür. En öncelikli derece 0’dır, en az öncelikli derece
3’tür. Çalışmakta olan bir kodun 0-3 arasında bir öncelik derecesi vardır. Bellek bölgesi de
benzer biçimde 0-3 arasında öncelik derecelerine atanmıştır. Düşük öncelikli kodlar kod ve
data bakımından yüksek öncelikli bellek bölgelerine erişemezler. İşletim sisteminin kritik
kodları ve dataları 0 öncelikli bölgelerde bulunur (ring0) böylece sıradan programlar bu
dataları bozamazlar. Ancak sistem fonksiyonlarının bellekte her bölgeye erişebilmesi gerekir.
Bellekte her bölgeye erişebilmesi için sistem fonksiyonlarının ring0’da çalıştırılabilmesi
gerekir. İşte intel işlemcilerinde kapı denilen bir kavram yoluyla işletim sisteminin izin
verdiği güvenli kodlar öncelik derecesi yükseltilerek çalıştırılabilmektedir. Böylelikle ring3’te
çalışan kodlar işletim sisteminin güvenli kodlarını ring0’da çalıştırabilmektedir.


open Fonksiyonu
open fonksiyonu tipik olarak fopen fonksiyonu tarafından çağırılan POSIX fonksiyonudur.


int open(const char *path, int oflag, ...);
open fonksiyonu iki parametreli ya da üç parametreli olarak kullanılabilir. Fonksiyonun
eskiden iki parametresi vardı, daha sonra genişletildi. İki farklı isimli fonksiyon olmasın diye
değişken sayıda parametre alan bir görüntüye sokuldu.


open fonksiyonu iki ya da üç parametreli çağırılır. Üç parametreli kullanılırsa üçüncü
parametre erişim bilgileridir. Fonksiyonun ikinci parametresi çeşitli sembolik sabitlerin bit or
işlemine sokulması ile elde edilir. Bu sembolik sabitler şunlardır:


O_RDONLY
O_WRONLY
O_RDWR
O_APPEND
O_CREAT
O_EXCL
O_NONBLOCK
O_TRUNC
O_RDONLY, O_WRONLY, O_RDWR belirlemelerinden en az biri kullanılmalıdır.

Bu
belirlemeler isimlerinden de anlaşılacağı gibi okuma yazma işlemlerinin yapılacağını belirtir.
O_CREAT dosyayı yoksa yaratır, dosya varsa bu değerin bir etkisi olmaz. O_TRUNC dosya
varsa onu sıfırlar ancak dosya yoksa bir etkisi yoktur. O_EXCL tek başına kullanılmaz
mutlaka O_CREAT ile kullanılır. Normalde dosya varsa O_CREAT hiç bir anlam ifade
etmez. Ancak bununla birlikte O_EXCL de kullanılmışsa bu durum fonksiyonun başarısız
olmasına yol açar. O_APPEND yazma işlemleri sırasında sona eklemeye yol açar. Yani her
yazma işlemi sırasında yazma fonksiyonları otomatik olarak dosya göstericisini EOF
durumuna çekerek oraya yazar. open fonksiyonu başarılıysa dosya betimleyicisi değerine,
C ve Sistem Programcıları Derneği 30
başarısızsa –1 değerine geri döner. open fonksiyonunun prototipi ve açış modunu
oluşturmakta kullanılan sembolik sabitler fcntl.h başlık dosyası içerisindedir.
open fonksiyonunun üçüncü parametresi ancak O_CREAT belirlemesi yapıldıysa anlamlıdır.
Bu parametre erişim haklarını belirlemekte kullanılır, fonksiyon bu parametreyi O_CREAT
belirlemesi yapılmışsa kullanır (eğer yanlışlıkla O_CREAT belirlemesi yapıldığı halde
üçüncü parametre girilmemişse bir derleme zamanı hatası oluşmaz, fonksiyon stack’ten
rasgele bir değer çeker). Erişim hakları için geleneksel olarak dokuz bitlik sayı
kullanılmaktadır. Dokuz bitlik bu sayıda her üç bit yüksek anlamlıdan düşük anlamlıya doğru
sırasıyla sahip, grup, diğer erişim bilgilerini belirlemektedir. 0666 -> 110 110 110 sırasıyla
wr-wr-wr-. Ancak fonksiyonun üçüncü parametresinin bu biçimde dokuz bit olarak girilmesi
POSIX standartlarınca garanti altına alınmamıştır. Bunun için daha önce incelediğimiz
sembolik sabitler kullanılır. Bu sembolik sabitler sys/stat.h başlık dosyası içerisindedir.


S_I + R + USR
S_I + W + OTH
S_I + X + GRP
Örneğin S_IWUSR dosyanın sahibine yazma hakkı verir.


fd = open(“a.dat”,
O_RDWR | O_CREAT | O_TRUNC,
S_IUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);


fopen fonksiyonundaki açış modlarının open fonksiyonundaki bazı karşılıkları şunlardır:


“r” O_RDONLY
“r+” O_RDWR
“w” O_WRONLY | O_CREAT | O_TRUNC
“w+” O_RDWR | O_CREAT | OTRUNC

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER