Sadece iki endüstri, müşterilerini kullanıcı olarak adlandırır.

Anonim

Bana Atılan E-Postaların Yanıtları

Sevgili Arkadaşlar...

Bu site aracılığıyla -bazıları sorulardan oluşan- pek çok e-posta alıyorum. Ancak yoğunluk nedeniyle bazılarına yanıt yazamadım.  Sakın unuttum sanmayın ve "adam bir yanıt bile yazmadı" diye düşünmeyin :-). Bundan sonra atacağınız e-postalara da daha kısa bir süre içinde yanıt vermeye çalışacağım. Gecikme için özür diliyorum...

 

Lütfen Alıntılarda Kaynak Belirtiniz

Çeşitli Internet sitelerinde yazmış olduğum makalelerden, ders notlarından, çizimlerden, kaynak kodlardan vs. bire bir alıntı yapıldığını, ancak kaynak belirtlmediğini görüyorum. Lütfen bu gibi alıntlarda kaynak belirtiniz.

Kitap Eleştirisi

Artık her hafta sitede bilgisayar alanında basılmış bir kitabın eleştirisini göreceksiniz. Umarım beğenirsiniz...

Yıla Göre

Yeni İçerik

C’nin Standart Dosya Fonksiyonlarının Uyguladığı Tamponlama Mekanizması

    Standart C fonksiyonlarını kullanmadan bir dosyanın her byte’ı üzerinde sırasıyla işlem yapmak isteyelim. Herhalde ilk akla gelecek yöntem doğrudan işletim sisteminin sistem fonksiyonlarını çağırmak olacaktır. Örneğin UNIX/Linux sistemlerinde dosyayı read fonksiyonuyla (Windows sistemlerinde ReadFile fonksiyonuyla) byte byte aşağıdaki gibi okuyabiliriz:
 
int fd;
ssize_t result;
unsigned char ch;

if ((fd = open("test", O_RDONLY)) < 0) {
    perror("open");
    exit(EXIT_FAILURE);
}

while ((result = read(fd, &ch, 1)) > 0) {
    /* Okunan byte işleniyor */
}   

if (result < 0) {
    perror("read");
    exit(EXIT_FAILURE);
}   

close(fd);

Programların Komut Satırı Argümanları

    İşletim sistemi tarafından prosese geçirilen komut satırı argümanları program içerisinden çeşitli biçimlerde elde edilebilmektedir. En yaygın yöntem komut satırı argümanlarının programın başlangıç fonksiyonunun parametrelerinden elde edilmesidir. Örneğin, C ve C++’ta komut satırı argümanları main fonksiyonuna parametre olarak geçirilirler. Bu dillerin standartlarına göre programın başlangıç noktasını (entry point) belirten main fonksiyonunun parametrik yapısı ve geri dönüş değeri aşağıdaki iki durumdan biri biçiminde olmalıdır:

int main(void)  { /* ... */ }
int main(int argc, char *argv[]) { /* ... */ }

UNIX/Linux Sistemlerinde Proseslerin Yaratılması ve Sonlandırılması

    Hemen her işletim sistemi bir proses yaratıldığında, o prosese ilişkin bilgileri bir veri yapısında saklar. Proses bilgilerinin saklandığı bu veri yapısına proses kontrol bloğu (process control block) denilmektedir.[1] Örneğin UNIX türevi sistemlerde proseslerin gerçek (real) ve etkin (effective) kullanıcı ve grup id’leri, çalışma dizinleri (current working directories), açmış olduğu dosyalar gibi önemli bilgilerin hepsi, onların kontrol bloklarında tutulmaktadır. Proses kontrol bloğunun nasıl düzenlendiği ve tam olarak hangi elemanlara sahip olduğu sistemden sisteme, hatta aynı sistemlerde versiyondan versiyona değişebilmektedir. Örneğin Linux sistemlerinde proses kontrol bloğu oldukça fazla elemana sahip olan task_struct yapısı ile temsil edilmiştir.  Bu yapının bir bölümünü aşağıda veriyoruz (Version:2.6.35, include/linux/sched.h):

UNIX/Linux Sistemlerinde exec İşlemleri

    UNIX/Linux sistemlerinde fork fonksiyonu prosesin yeni ve özdeş bir kopyasını oluşturmaktadır. Yani fork işlemi sonrasında alt ve üst prosesler aynı program kodunu (muhtemelen onların farklı kısımlarını) çalıştırıyor durumda olurlar. Halbuki pek çok uygulamada programcı yaratmış olduğu alt prosesin farklı bir program kodunu çalıştırmasını ister. İşte exec fonksiyonları prosesin başka bir program olarak çalışmaya devam etmesini sağlamaktadır. exec işlemleri sonrasında prosesin id değeri ve kontrol bloğu değişmez. Prosesin kod, data ve bss alanları çalıştırılabilen (executable) dosyadan alınarak yüklenir. Proses artık yaşamını başka bir program olarak sürdürür.

UNIX Türevi Sistemlerde Blokeli ve Blokesiz Modda Dosya İşlemleri - Temel Bilgiler



    Disk tabanlı dosyalar (regular file) üzerinde read ve write fonksiyonları ile okuma ve yazma yaparken uzun süreli bir bekleme söz konusu olmaz. Bu fonksiyonlar işlemlerini göreli olarak hızlı bir biçimde başarılı ya da başarısız olarak sonuçlandırırlar. Her ne kadar normal dosyalarla çalışırken işletim sistemi disk okuma ve yazmaları sırasında prosesi bloke ederek belli bir süre çizelge dışına çıkartabiliyorsa da buradaki bekleme önemli bir boyutta değildir. Halbuki bazı tür dosyalarla çalışırken bekleme belirsiz bir boyutta ve çok uzun süreli olabilmektedir

Proseslerin Çevre Değişkenleri

    Modern işletim sistemlerinde her prosesin bir çevre değişken bloğu vardır. Prosesin çevre değişken bloğu çevre değişkenlerinden ve onların değerlerinden oluşmaktadır. Örneğin, MESAJ bir çevre değişkeninin ismi olabilir, “Merhaba Dunya” ise onun değeri olabilir. Çevre değişkenleri pek çok işletim sisteminde proses yaratılırken belirlenebilmekte  ya da üst prosesten (parent process) aktarılabilmektedir. Çevre değişkenlerinin üst prosesten aktarılması en çok karşılaşılan tipik durumdur.

Programlama Dili: Ortam:

[1] C - Genel
1. Hafta
29 Haziran 2009
[2] C# - Genel
1. Hafta
17 Ağustos 2009
[3] C - Genel
1. Hafta
12 Ekim 2009

Haftanın Böceği Yukarı