Şu Anda Baktığınız Yer
Category: Linux

C Programlama ile 3 Linux Komutu Gerçeklemesi(find,mv,cd)

C Programlama ile 3 Linux Komutu Gerçeklemesi(find,mv,cd)

Bu yazıda kullanılacak terimler:

Komutlar:
-fork, mv, cd, gcc
Programlar:
-cygwin
İşletim sistemi:
-Linux

Bu yazımda öncelikle Linux işletim sistemi için geliştirdiğim bir C dosyasını, windowsta nasıl çalıştırabiliriz onu göstereceğim.Linux işletim sistemi kurulu bilgisayarlarda bu işemi yapmanıza gerek yoktur.
Daha önceden cygwin’iniz varsa ve C programlarını derlediğini test edebiliyorsanız bu adımı geçin.(Test için bir sonraki adıma geçin)

Linux kütüphanelerini içeren C kodunu derleyebilmek için burdan cygwin’i indirin.

Kurulumda “Select Packages” kısmına gelene kadar hiç bir şeyde değişiklik yapmayın.Select Packages kısmında ise, search yerine “gcc” yazın ve gelen listeden “devel” i seçin.İçindenC ile ilgili olan bütün paketleri yüklenmek üzere işaretleyin.Altta işaretleneceklerin olduğu ekran görüntüleri vardır.

 

Daha sonra search yerine “core” yazıp yine “devel” içinden C ile ilgili ne varsa işaretliyoruz.Yine aynı şekilde işaretleneceklerin altının çizildiği ekran görüntüsü aşağıda verilmiştir.

 

İşaretlemeleri  yaptıktan sonra “İleri” diyerek yüklemeye geçiyoruz.Yaklaşık olarak 20-25 +- 10 dk sürebilir.
Yükleme bittikten sonra bir deneme yapalım.
Bu prgoramı windowstaki “cmd” olarak düşünebilirsiniz.Bir notepad veya c derleyicisini açıp şu kodları girin. dosyayı .c uzantılı kaydetmeyi unutmayın.

Daha sonra yazdığınız bu programı C:cygwinsetupdirhome yoluna yapıştırın.


#include<unistd.h>;
int main()
{

    printf("My ID:%ld",(long)getpid());
    printf("My parent ID: %ldn",(long)getppid());
    printf("My user ID: %ldn",(long)getuid());</font>

   return 0;

}

Bu dosyayı ab.c olarak kaydedelim mesela.
Masaüstünden cygwin simgesini çift tıklayıp açın.Şu komutu girin  “cd ..”.
sarı ile /home  dizininde olduğumuzu belirten bir yazı çıkacaktır.Daha sonra “gcc ab.c”  komutunu girin ve entera basın.

ab.c: In function ‘main’:
ab.c:7:6: UYARI: ‘printf’ yerleşik işlevinin uyumsuz örtük bildirimi

diye bişey çıkabilir.Herşey yolunda.

Tekrardan $ işareti çıkacaktır.Buraya “./a.exe” (derleme yapıldıktan sonra herzaman, siz isim vermedikçe a.exe olarak oluşturacaktır.) komutu yazın ve entera basın.

Burada yazılan, My ID, çalışan process’in(Yani yazdığımız programın) id’sidir.My parent ID ise, bu process’i yaratan process’in id’sidir.User id ise, PC nin user idsidir.

Benim yazdığım programı çalıştırmak için de aynı şekilde bir işlem gerçekleştireceğiz.

turkshell.c dosyasını burdan indirin.

turkshell.c programını yine C:cygwinsetupdirhome dizinine kopyalayın.Daha sonra cygwin’i açıp “cd /home” yazın.Daha sonra “gcc turkshell.c” komutunu girin.Bir sürü uyarı verebilir.Normaldir.Daha sonra “./a.exe” komutunu girin.Çalışan program şu şekilde olmalı.

 

Komutları şu şekilde girebilirsiniz.

cd ..

cd C:/Program Fİles

mv C:/Program Files/abc.exe  D:/

find -name a.txt

Kısaca komutların ne işe yaradıkları:

cd komutu: Programın çalışma alanını değiştirir.
mv komutu: yanına gelecek 2 parametre ile(<kaynak><hedef>) bir dosyayı taşımanızı sağlar.
find komutu: Programın bulunduğu çalışma alanı içeirisndeki bütün dosyaları tarar.(Klasörlerin içleri de dahil)

Not:mv komutu için  verilerinizin silinmesi durumunda sorumluluk kabul etmemekteyim.Deneme yaparken gereksiz dosyalarla iş yapınız.

Programın çalışma şekli:

Program, ilk açıldığında tek process olarak iş yapmaktadır.Ancak komutlar alındığında ana process, yeni processler oluşturmaktadır ve ana process tekrardan komut alma durumuna geçmektedir.

Bu durumu ise, fork() keywordü ile sağlayabiliriz.Program içerisinde fork() yapıldığı andan itibaren, o satırdan sonraki komutlar için ikiye ayrılır.Ancak biri parent’dır.Diğeri çocuk processtir.Hangisi şu şekilde anlayabiliriz.Fork fonksiyonu çalıştırma sonunda bir değer döndürür.Bu değer eğer 0’sa o çalışan process çocuktur.0’dan farklı bir değerse parenttır.Buna göre işlem yapılmaktadır.