Blog

C Dilinde strtok, remove, rename ve system Fonksiyonları

C dilinde string.h kütüphanesinde yer alan strtok işlevi, kendisine parametre değeri olarak verilen bir yazıyı, belirli karakterlere göre parse etmekte (ayırmakta) dir. Örnek olarak elimizde şöyle bir yazı olsun:

“gais,siber,guvenlik,teknolojileri”

Bu yazıda kelimeleri bir birinden ayırmak için aralarda belirli atomlar var. Bu atomlar virgül olabileceği gibi bir harf veya özel karakter olabilir.

Strtok işlevinin, başlık dosyasındaki bildirimi (declaration) şu şekildedir:

#include

 

char *strtok(char *str,  const char *delim);

 

strtok işlevi geriye adres döndüren char türünden bir işlev. İşlev, verilen birinci parametrede ki yazı da ikinci parametrede geçen karakteri arar. Bunlardan birini bulursa yazının veya kelimenin sonuna \0 yerleştirip geriye adresini döner. Eğer birinci parametrede NULL geçerse işlev kaldığı yerden devam eder. Eğer bulunacak hiç bir atom kalmamışsa, işlev NULL adresle geri döner.

 

Bu işlevin kullanımına şöyle örnek verilebilir.

 

#include

#include

int main(void) {

                char text[] = “gais,siber,guvenlik,teknolojileri,”;

                char *str;

                str = strtok(text,”,”);

                               while(str !=NULL){

puts(str);

str=strtok(NULL,”,”);

}

                return 0;

}

 

Strtok işlevine ikinci parametre olarak verilen aranacak atom değeri yalnızca virgül olmak zorunda değildir. Tipik bir tarih değeri örneği de verilebilir. Geri dönüş değerinden gün ay yıl bilgisi elde edilebilir.

16/05/2019

#include

#include

int main(void) {

                char text[] = “16/05/2019”;

                char *str;

                str = strtok(text,”/”);

                               while(str !=NULL){

puts(str);

str=strtok(NULL,”/”);

}

                return 0;

}

Programımız derlenip çalıştırıldığında elde edilecek çıktı şöyle olmalıdır.

 

 

 

Remove işlevi

Bu işlev kendisine parametre değeri olarak verilen dosya dizin bilgisindeki dosyayı siler.

Stdio.h başlık dosyası içerisinde gelir ve standart bir fonksiyondur. Fonksiyonun bildirimi şu şekildedir.

#include

int remove(const char *path);

 

Const char * türünden path bilgisi istemektedir. Const bilgisi alınan parametre değerinin set amaçlı değil GET amaçlı yani okuma amaçlı olduğunu belirtmektedir. Fonksiyonun kullanımına şu tarzda bir örnek verilebilir.

#include

#include


int main(void)

{

       if (remove("test.txt") == -1) {

             fprintf(stderr, "Dosya silinemedi!..\n");

             exit(EXIT_FAILURE);

       }

       printf("Silme işlemi basarili.\n");


       return 0;

}

 

Rename işlevi

Rename fonksiyonu var olan bir dosyanın adını değiştirmeye yarayan standart bir C fonksiyonudur.

Rename fonksiyonunun bildirimi stdio.h başlık dosyasındadır. Bildirimi şu şekildedir:

#include

 

int rename(const char *old, const char *new);

 

Geri dönüş değeri, başarısızlık veya başarı değerini belirtmesi için int dir. Fonksiyon başarı ile işini bitirdiğinde 0 değeri, fonksiyon başarısızlıkla işini bitirdiğinde -1 değeri ile dönüş yapar.

Fonksiyonun const char* türünden iki adet parametresi vardır. Bu parametrelerden ilki ismi değişecek dosyanın bulunduğu dizin bilgisi, ikinci parametresi ise dosyanın yeni ismidir.

Fonksiyonun çalışmasına şu örnekle göz atalım.

 

 

#include

#include

 

int main(void)

{

                if (rename("test.txt", "x.txt") == -1) {

                               fprintf(stderr, "Dosya ismi degistirilemedi!..\n");

                               exit(EXIT_FAILURE);

                }

                printf("isim degistirme islemi basarili.\n");

 

                return 0;

}

 

Rename fonksiyonu Windows ve UNİX/Linux sistemlerde dosyayı taşıma işleminide yapabilmektedir.

 

System işlevi

System fonksiyonu kabuk programını interaktif olmayan modda çalıştırarak parametresiyle belirtilen kabuk komutunun kabuk tarafından çalıştırılmasını sağlar. Fonksiyon bildirimi şöyledir:

#include

İnt system(const char *string);

Fonksiyon kabuk komutunu yazı olarak alır. Kabuk programını (komut yorumlayıcı programı) çalıştırarak komutu kabuk programına işlettirir. Fonksiyonun geri dönüş değeri sistemden sisteme değişebilmektedir (implementation dependent). Pek çok sistemde system fonksiyonu fonksiyon başarı durumunda sıfır, başarısızlık durumunda -1 değerine geri dönmektedir. Fonksiyon özel bir durum olarak NULL adresle çağrılabilir. Bu durumda fonksiyon sıfır dışı bir değere geri dönerse ilgili sistemde kabuk programı vardır, sıfıra geri dönerse yoktur.

 

Örneğin:

 

#include

#include

 

int main(void)

{

       if (system("ren x.txt a.txt& copy a.txt b.txt") != 0) {

             fprintf(stderr, "system calismadi!..\n");

             exit(EXIT_FAILURE);

       }

 

       printf("komut basarili\n");

 

       return 0;

}

 

Komut satırında bir komut kendi içerisinde komut parçalarına ayrılabilmektedir. Bu işlem UNİX/Linux üzerinde “;” atomu ile, Windows sistemler üzerinde “&” atomu ile yapılır. Linux sistem üzerinde varsa bash, sh, dash gibi , windows üzerinde powershell, command prompt üzerinde komutlar yürütülebilmektedir.

Windows ve UNIX/Linux sistemler üzerinde ki kabuk yazılımlarında temel olarak iki farklı mod vardır. İnteraktif mod ve interaktif olmayan mod. İnteraktif mod üzerinde command prompt açılır, komut çalıştırılır ve exit gibi bir kapanış (close&logout) komutunun çalışması beklenir. Fakat interaktif olmayan modda çalıştırılacak komut işlenir ve kabuk programdan çıkılır.  Windows üzerinde tek komut çalıştırma “cmd.exe /C” seçeneği ile, UNIX/Linux sistemlerde ise “bash  -c” seçeneği ile çalışır.




Yazar Hakkında

Lise son sınıf öğrencisidir, 2010 yılından beri siber güvenlik ile ilgilenmektedir. CSS, PHP, C/C++ dilleri ve Web Penetration Testing ile yakından ilgilenmektedir. Bunlara ek olarak Sistem, Network ve Güvenlik Uzmanlığı eğitimleri almış olan Kelepçe, Bug Bounty Ödül Avcılığı kapsamında birçok tanınmış şirketten ödül almıştır, şuanda bilişim faaliyet topluluklarında Bilgi Güvenliği ve Sızma Testleri işlerini gönüllü olarak yapmaktadır.






Yorum Yapmak İçin Giriş Yapın.