Linux etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Linux 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:

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:

3 Aralık 2012 Pazartesi

Linux


dosyayı cat ile olusturuyoruz örnegin ;

cat > suleyman dedigimizde  suleyman adlı dosya olusturulur imlec altta kayar icine yazmaya baslarız işimiz bitincede kaydetmesi veacıkması icin ctrl d  ye basarız ...
daha sonra eger dosyaya yine birseyler eklemek istersek cat >> suleyman diyoruz
içini görüntülemek icinse cat suleyman diyoruz
Share: