<sys/time.h>, <sys/types.h>, <unistd.h>, <time.h> Başlık Dosyaları // C

Başlatan sem, 12 Ağustos 2010 - 21:47:19

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

sem

Alıntı yapılan: ozdemir08 - 10 Ağustos 2010 - 13:59:05
@sem0900 aşağıdaki kütüphaneler hakkında yeni bir konu olarak daha ayrıntılı bilgi verebilir misin?
sys/time.h
sys/types.h
unistd.h
time.h

Konuyu yukarda yaptığım alıntı için açıyorum. Umarım merak eden diğer arkadaşlar için de bir yardımcı etkisi olur.

unistd.h bu başlık dosyasında bazı sembolik sabitler tanımlanmıştır ve Unix/Linux sistem fonskiyonlarının çoğunun prototipini içerir. Genel olarak nedir sistem fonksiyonları? printf fonksiyonu ile Windows sistemlerinde de Linux sistemlerinde de stdout dosyasına çıktılarımızı yazdırıyoruz. stdout dosyaları da standartlarda böyle olması zorunlu mu bilmiyorum fakat genel olarak bütün sistemlerde ekrana yönlendirilmiştir. Yani stdout aslında bir dosya olarak işlem görür ve bu dosya ekrana/monitöre yönlendirildiği için bu dosyaya yazılanları ekranda görürürüz. Şu şekilde test edebilirsiniz dosyaya yazdırma yapan fprintf fonksiyonunu;

fprintf(stdout,"ekrana yazılacağım ben");

şeklinde denersiniz demek istediklerimi daha iyi anlarsınız. Sonuç olarak bu işlemleri yani printf, fprintf, scanf gibi okuma yazma fonksiyonları standart olduğu için bütün sistemlerde işimizi görür. Yani Windows ve Linux farklı sistemler olduğuna göre arkada başka işler döndüğü kesin. Bizim standart fonksiyonlarımız aslında işlevlerini yapmak için sistem fonskiyonlarını çağırır bir şekilde. Unix/Linux sistemlerde bu okuma yazma işini yapan sistem fonksiyonları işte tam bu bahsettiğimiz unistd.h dosyası içersinde bulunurlar. Bu fonksiyonların prototipi aşağıdaki gibidir;

ssize_t read(int fd , void *buf, size_t n);
ssize_t write(int fd ,const void *buf, size_t n);


Biliyorsunuz ki typedef ile kendi türlerimizi tanımlamamız mümkün. POSIX'de standart olarak bazı türler tanımlamıştır ve bunları genel olarak sys/types.h dosyasında tanımlamıştır. Standart olarak tanımlanması zorun türler olanlar başka dosyalarda POSIX'in tanımladıkları türler başka dosyalarda saklanmıştır. Fakat ayrıca birbirlerinin içinde tanımlanmaması gibi bir zorunluluk getirilmemiştir. Yani  ssize_t türü sys/types içinde tanımlandıktan sonra ayrıca başka dosyalarda da tanımlanabilir, ya da bu dosyalar birbirlerine "include" uygulayabilirler. Yani genel olarak sys/types.h bazı türlerin ya da sembolik  "define" edildiği başlık dosyasıdır. Yanlış hatırlamıyorsam #define IPPROTO_TCP 1 ya da 0 da olabilir emin olamadım =)... Net olarak bu olmasa da bu gibi tanımlamaları içeren başlık dosyasıdır.


sys/time.h ise standart olmayan Unix/Linux'a özel zaman fonksiyonları ve yapıları içeren başlık dosyasıdır. Bu başlığı kodlarınıza dahil ederek mikro saniyeler mertebesinde çalışabilirsiniz. Fonksiyon ve yapılar dışında time_t ve suseconds_t gibi türler de bu başlık dosyasında "define" edilmiştir.

struct timeval {
    int tv_sec;     
    int tv_usec;   
};

struct temival yapısından bir değişken tanımlayarsanız tv_sec elemanı saniye, tc_usec ise gireceğiniz mikrosaniyinizi barındırabilir. Bu şekilde mikrosaniyeler ile çalışma imkanınız olur.

time.h ise "struct tm" nin, standart C tarih ve zaman fonksiyonlarının ve sembolik sabitlerinin tanımladığı başlık dosyasıdır. Bu başlık dosyasındaki fonksiyonlar ile Unix zamanından (01/01/1970) programın çalışma anına kadar geçen zamanı saniye cinsinden hesaplayabilir ve yardımcı fonksiyonlar ile bu tarihi değişik formatlara çevirebilirsiniz yyyy/aa/gg gibi.


Ayrıca Unix/Linux (Windows tarafından haberim yok orada da olabilir hatta kesin vardır ama ben bilmiyorum) sistemlerde bütün bu anlatılanlara ek olarak Giriş/Çıkış dosyalarınızı düzenlemeniz fd_set türü tanımlanmıştır. Siz bir fd_set grubu oluşturup giriş ve çıkış dosyalarınıızı fd_set'lerin özelliklerine kullanabilirsiniz. "Girilecek sayıyı en fazla 3 saniye bekle" gibi...  fd_set içine dahil ettiğiniz giriş/çıkış dosyalarınız struct  temival türünden zamanı bekleyebilirler.  Şuradaki programın kodlarından fd_set kullanımına bir örnek görebilirsiniz.

Bu arada read ve write fonksiynlarının int türünden parametre aldıklarına dikkat edin... Yani FILE türü de aslında yanılmıyorsam int  türünden define edilmiştir.

Bildiklerim bu kadar ya da aklıma gelenler... Zaman sıkıntısından dolayı biraz acele ile hazırladım dosyayı, sorusu olan arkadaş olursa bu başlık altından sorsun hep beraber yanıtlamaya çalışalım... Yanlış söylediğim bir şey varsa da bilen arkadaşlar düzeltir sanıyorum. Umarım bir fikir sahibi olmanız açısından biraz açıklayıcı olmuştur. Kolay gelsin...

NOT: define etmek diye Türkçe bir tabir yoktur. Sadece #define önişlemci komutunun kullanıldığını vurgulamak için alışılagelmiş şekli ile kullandım.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?