c etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
c etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

22 Ocak 2016 Cuma

POpen-PClose ile Read Write İşlemleri

#include 

int main(void)
{
        FILE *pipein_fp, *pipeout_fp;    
//pipein ve pipeout için Dosya yolu tanımlıyoruz
        char readbuf[80];                      
 //Char dizisini tanımladık

        /* Create one way pipe line with call to popen() */
        




if (( pipein_fp = popen("ls ", "r")) == NULL)      
 //Okumak İçin Boru Hattını Açıyor ls ile Dosya yolumuzdaki Dosya Adlarını Okuyoruz
        {
                perror("popen");         //Eger Acımladı İse Hata Veriyoruz 
                exit(1);
        }

        /* Create one way pipe line with call to popen() */
        if (( pipeout_fp = popen("sort", "w")) == NULL)    
 //Dosya Yolunu yazmak icin acıyoruz ve Sort Ederek Yazıyoruz
        {
                perror("popen");  
                exit(1);
        }

        /* Processing loop */
        while(fgets(readbuf, 80, pipein_fp))     
   //Readbuf  Tamponuna pipeinfp nin icindekileri alıyoruz 
                fputs(readbuf, pipeout_fp);         
   //Readbuf  ile Pipeout ile ekrana yazdıroyrz
   
        /* Close the pipes */
        pclose(pipein_fp);                //Boru hatlarını Kapatıyoruz
        pclose(pipeout_fp);

        return(0);
}

Share:

POpen Ve PClose Kullanımı ?

#include 

#define MAXSTRS 5




int main(void)
{
int counter; //döngüde dolaşacak degiskenimiz
FILE *pipe_fp; // Boru Hattı Oluşturmak İçin dosya tanımlıyoruz
char *strings[MAXSTRS]={"echo","bravo","alpha","charlie","delta" };
       //String dizimizi ve elemanlarını tanımladık



if((pipe_fp =popen("sort","w"))==NULL)   //Popenı Tek Yönlü Bir Boru Oluşturuyor ..Veriler yazmaya aclır ve  sort edilir
{


        perror("popen");    //Oluşmazsa Hata Veriyor
        exit(1);
}

for(counter=0;counter<MAXSTRS;counter++)   //Dizimizin İçinde GeZimnmek İçin
{


    fputs(strings[counter],pipe_fp);   //Stringin belirtilen Elemanını ,pipea Yönlendirir
    fputc('\n',pipe_fp);      // Ekrana Yazdırma Kısmı
}
pclose(pipe_fp);   //Son olarak Boruyu Kapatıyoruz

return 0;




Share:

21 Ocak 2016 Perşembe

Dup() ve Dup(2) Çagrısı Nedir?

//BİR PROESİN CIKTISINI KOPYALAMAYA YARAR DUP()...YÖNLENDİRMEYE YARAR..İKİ ÇEŞİTTİR
//İstersek Tanıtıcıyı  Kapatırız Kapatmasakta OLur..FAKAT DUP2 İLE ESKİ TANITICI(fd) KAPATILIR 






KULANIMI:


SYSTEM CALL: dup();                                                           

  PROTOTYPE: int dup( int oldfd );                                              
    RETURNS: new descriptor on success                                          
             -1 on error: errno = EBADF (oldfd is not a valid descriptor)       
                                  EBADF (newfd is out of range)                 
                                  EMFILE (too many descriptors for the process) 






childpid = fork();
       
       if(childpid == 0)
       {
               /* Close up standard input of the child */
               close(0);
               
               /* Duplicate the input side of pipe to stdin */
               dup(fd[0]);
               execlp("sort", "sort", NULL);
               .
       }



//BUDA DİGER ŞEKLİ KULANIMI :DUP2()

SYSTEM CALL: dup2();                                                          

  PROTOTYPE: int dup2( int oldfd, int newfd );                                  
    RETURNS: new descriptor on success                                          
             -1 on error: errno = EBADF (oldfd is not a valid descriptor)       
                                  EBADF (newfd is out of range)                 
                                  EMFILE (too many descriptors for the process) 

  NOTES: the old descriptor is closed with dup2()!












childpid = fork();
       
       if(childpid == 0)
       {
               /* Close stdin, duplicate the input side of pipe to stdin */
               dup2(0, fd[0]);
               execlp("sort", "sort", NULL);
               .
               .
       }
Share:

Process ve ChildProses İle Read/Write


#include 
#include 
#include 


//BURADA  ÇOCUK PROSES YAZMA İŞLEMİ YAPACAK VERİ YOLLAYACAK ANA POSES İSE VERİ ALACAK OKUMA YAPACAK
// YADA ANA PROSES YAZACAK COCUK PROSES OKUYACAK
//fd[0] okuma fd[1] ise Yazma Bölümü Buna Göre Eger Cocuk pidsi  0 da ise   Okuma(fd[0] )Kısmı Kapalı Olmalı Çünkü Yazma Yapacak
//Cocuk pidsi  0 degil ise   Yazma (fd[1] )Kısmı Kapalı Olmalı Çünkü Okuma Yapacak


int main(void)
{
        int     fd[2], nbytes;     //Pipe dizisi Degiskeni
        pid_t   childpid;        //Pid Degiskeni
        char    string[] = "Hello, world!\n";    // yollanacak String
        char    readbuffer[80];

        




        pipe(fd);                //Boru oluşturuldu

        if((childpid = fork()) == -1)     //Eger Sonuc -1 ise Cocuk Proses Oluşturulamadı ..Sonuc 0 ise oluştu
        {
                perror("fork");
                exit(1);
        }



//pid  0 ise cocuk proses okuma kısmında  biz   Okuma Kısmı Olan fd[0]  
//kapatıoyruz ve yazmaya baaslıyoruz

        if(childpid == 0)     

        {
                /* Child process closes up input side of pipe */
                close(fd[0]);

                /* Send "string" through the output side of pipe */
                write(fd[1], string, (strlen(string)+1));
                exit(0);
        }
        else
        {
                /* Parent process closes up output side of pipe */
                close(fd[1]);

                /* Read in a string from the pipe */
                nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
                printf("Received string: %s", readbuffer);
        }

        return(0);
}

Share:

Pipe Oluşturma Ve ChildProcess Oluşturma (Fork)

#include 
       #include 
       #include 

       main()
       {
               int     fd[2];        //Read ve Write Yapacak İki Adres Alıyoruz File Descriptor
               pid_t   childpid;

               pipe(fd);     // PİPE fonksiyonu ile Pipeı Oluşturuyoruz

               if((childpid = fork()) == -1)    //oluşmadıysa   hata veriyoruz
               {
                       perror("fork");
                       exit(1);
               }

              else
               {
                   printf("Fork\n");    //oluştuysa Oluştugunu Yazıyoruz
               }
       }

Share:

IP,SOCKET,TCP,UDP,PİPE NEDİr?


  • Ip nin Yapısı:
     işaret  |     alıcı     |     gönderici  |   kontrol   | veri uzunluğu  | veri     |     Frame check |  İşaret 
       1bit  |      6 bit    |    6 bit           |    2 bit      |    2 bit              |   ?        |    4 bit               | 1 bit    
  • Gönderme Tarihi Olmaz Yaşam Süresi Vardır Ip lerin 
  • İletişimi Saglayan Protokol : TCP dir
  • IP Paketin Varıp Varmayacagına Garanti Vermez Bir tane Yaşam Sayacı atar Her Uğranan Routerda 1 Azalır Eğer paket varmadan 0 oldu ise  zaman Aşımına Uğrar Böylece Gereksiz Trafik Yoğunlu engellenir
  • Bir Mesaj Ip ile Diger Bligsayara Gtti Tamamda Hangi Programda Gösterilecek Bu Program 
          Buna Portu İle Karar VErilir ..Mesaj Yollanırken Hangi Portta Gösterliecegide Gelir 
  • Hangi Portun Nereye Bağlanacağını IANA Belirler.25 protu Mail İçindir 80 portu Web Tarayıcı İçindir
  • Toplam Port Sayısı 65536 Dır ..İlk !024 u uygulma Katmanındadır .Yüksek Seviyeli Protokollere Aittir Örnegin :   SMTP 25,Web 80 dir 





  • Soket Yapısı: Dosyayı Okuma Yazma  İçin Verilen Bir Süre Tanıtıcı verilir .Bu Tutulan Kayıtlara Ulaşmayı saglar .
  • Soket ve Dosyalar Arası Bariz Fark:  Dosyadan Okumak Kısa Sürer....Fakat Sokette Okuma Belirsizdir Ağdan Veri Ne Zaman Gelecek  Bu yüzden IPC Time Out Süresi Verilir Belli Sürede Okuyamazsa Süreç İptal Edlir 
  • FTP  TCP yi Kapsar,TCP de İP yi Kapsar 
  • TCP:Baglantılı Protokoldür Bilgi Yollar Takip Eder Hata Varsa Bir Daha Yollar Baglantıyı Koparmaz ..SOKET Sistemini Kullanır ..Güvenli fakat Yavaştır 
           UDP:Baglantısızıdır Veriyi Yollar Gittimi Gitmedimi Nereye Gitti Takip Etmez Baglanıtıyı ,
                     Koparır.RADYO YAYINI ÖRNEKTİR..Güveensiz Ama Hızlıdr 


  • Haberleşme Süreci Üç Tanedir :   Boru(Pipe),Shared Memory,Mesaj Sistemi 
  • Pipe: Bir Komutun Cıktısını Başkja Bir Komuta Yönlendirmeye Yarar 
  • a|b     Anın Stdoutu   B ye Stdin Olarak Verilir .İki File Descriptoru var.Reading ,Writing
  • Pipe Olusturmada Cıktı 0 İse Başarılı -1 İse Başarısızdır 
  • fd[0] reading, fd[1] writing  
  • Yazan Tarafın Pipe ı Doldurduysa Read Okuma Yapana kadar Yazan Taraf Bloke Edilir Yer Acılınca Devam İzni Verilir 




Share:

13 Ocak 2016 Çarşamba

Kod,Data,BSS,Stack ve Heap Nedir?

Bir Proses Başlatırlırken   Çalıştırılan Dosyadan Hareketle Adres Alanı İiçnde Belli Bölgeler Oluştrur Bunlardan en Önemlileri Data,Kod,BSS,Stack,Heap tir


  • Yükleyici Alanıların Büyüklüğünü Çalıştırılan Dosyanın Formatına Göre Belirler 
  • Calsıtırılan Dosyanın Kod Bölümü Kod Bölümünde ...Tanımlanan İLK DEGERİ VERİLMİŞ  Global Yada Yerel Değişkenler ise Data Kod Bölümünde Tutulur ..PE Ve ELF Formatında .data uzantısı ile tutulur
  • Tanımlanan İLK DEGERİ VERİLMEMİŞ  Global Yada Yerel Değişkenler ise BSS Kod Bölümünde Tutulur..PE Ve ELF Formatında .bss uzantısı ile tutulur
  • Const ile Tanımlanan Degiskenler ve  İki tırnak İçinde yazılan ifadeler READ ONLY kısımında tutuulr...Pe ve ELF Formatında .rodata uzantısı ile tututlur
  • Parametre Degiskenleri STACK bölümünde Tutulur




Share:

C Apı Nedir?,PoSix Fonksiyonları Nedir?

Apı : Bri Kütüphane Yada Framework ün Sundugu Yararlı İşler Yapan Fonksiyonlrın Genel Adıdır
        Örneğin : Java Api,Socket Apıleri gibi ...


  • Her Sistem Fonksiyonu Bir Apı Dir fakat Her Apı Bir Sistem Fonksiyonu Olmak Zorunda Degildir

PoSix Fonksiyonları :  Unix kendini Standartlastırmak icin Belli kriterler Koymuştur Bu standartlar
                                  Bütün Unix Türevlerinde Aynıdır .Bu ortak Fonksiyonların Genel Adı POSİX
                                  Standardıdır
Share:

C ,User Mod ,Kernel Mod

User Mod: Kullanıcı Modudur sistemle alakalı çoğu Hayatı İşlemi Yapamaz
Kernel (Super User)Mod : Sistem yöneticisinin Modudur Sistemle Alakalı yada Aygıt Sürücüsü Gibi
    Siteme Müdahale ibi Durumlarda Yönetici izni yani kernel mod calsıtrılır

Bir kodun Kernel Modda Çalışmasını istersek   onu Aygıt Sürüc yada Kernel Modül Biçiminde Yazmammız Gerekir


User Mod  Bir Sitem Fonksiyonunu Çagırdıgında  Otomatik Kernel Moda Gecer İşlem Bitinc
Tekrar User Moda Geçer
Share: