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

30 Mart 2013 Cumartesi

execvp kullanımı


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
void main(){
char *arg_list[] = {"ls","-l","-a",NULL};// "ls" komutu ve arkasında "-l","-a" komutu işlenecek NULL hangi komut olursa olsun girilmesi gerek
pid_t childPID;
childPID = fork();
if(childPID == 0){
printf("cocuk process%i",childPID);
execvp("ls",arg_list);
}
else{
printf("ana process\n");
}
printf("ana processID%i",getpid());
}


fork edilen bir child prosesi işlemek için kullanılan komuttur.Aslında "exec" ailesindendir.Bir sistem çağrısıdır(system call).Multithreading programlamada kullanılan komutlardan birisidir.

19 Mart 2013 Salı

Fork Bombing ve Korunumu

İsminden de anlaşılacağı gibi,bir process in kontrol dışı çoğalması ve kaynakların hunharca tüketilip sistemi dondurup,devre dışı haline getirmesidir.
Bir DOS(denial of service) saldırısıdır.Prosesler geometrik bir şekilde(1,2,4,8,16,32....) artacağı için memoryde akıl almaz bir kaynak tüketimi ve cpu nun işlem gücünü çalarak sistem üzerinde çalışan diğer hizmetlerin,programların çalışmasını engeller.
Şematize Fork Bombing

Fork Bombing den nasıl korunuruz ?

Unix türü işletim sistemlerinde kullanıcının bir oturumda açabileceği process sayısı önceden belirlenmiştir.Kullanıcı bu process sayısını kesinlikle aşamaz.unix te ulimit shell komutuyla bu sınırlama gerçekleştirilebilir.

Windows türü işletim sistemlerinde bu işlem process sayısı olarak değil de cpu kullanımı olarak ele alınmıştır.
kullanıcıların cpu kullanımı sınırlandırılır.

Basit bir Fork Bombing
Unix tabanlı işletim sisteminize aşağıdaki kodu yazıp çalıştırarak ne kadar çaresiz kalabileceğinizi öğrenebilirsiniz :)

#include <stdio.h>
#include <unistd.h>
void main(){
while(1){
fork();}
}
NOT:Derleyip çalıştırmadan önce açık kalan kayıt edilmemiş programlarınızı kapatın.

21 Aralık 2012 Cuma

Shell Geliştirmeye Giriş

Shell,terminal üzerinde yazdığınızı işlemleri(bu bir ekrana bastırma işlemi de olabilir,klasörün içindeki dosyaları harf sırasına göre sıralamakta olabilir) gerçekleştiren kod parçasıdır.
Sheller fiziksel olarak .sh uzantılı dosyalardır.Unixin kendi shell dili olduğu gibi,C,Perl gibi dillerde de shell yazılabilmektedir.

Terminal açılır.
gedit <dosyanızınadı>.sh 
olacak şekilde metin düzenleyicisi açılır.


Açılan metin düzenleyicisinde shellimizde yaptırmak istediğimiz kodlar yazılır.İlk shell kodumuz olduğundan kullanıcıdan iki giriş alan ve ekrana çıktı bastıran shell yazdıracağız.
echo "Merhaba Dünya"
echo "Ad:"
read ilkAd
echo "Soyad:"
read soyAd
echo "Benim adım $ilkAd $soyAd"
echo,ekrana yazdırmak istediğimiz metni gönderen bir komuttur.
read,kullanıcıdan aldığı veriyi bir değişkene atan bir komuttur.
echo komutunda read komutundan aldığımız parametreyi yazdırmak için yazdırmak istediğimiz değişkenin başına $ işareti getirilir.
Gördüğümüz gibi echo ve read komutuyla shell dosyamızı hazırlamış olduk.Şimdi nasıl çalıştıracağız ona bakalım

Düzenleyici(gedit) kapatıldıktan sonra terminale dönelim ve
sh shell01.sh
komutunu yazalım

Entera bastıktan hemen sonra kodumuzdaki ilk iki echo komutu vazifesi gereği aldığı stringleri ekrana bastırmakta ve read komutu sizden giriş yapmanızı beklemektedir.


7 Mart 2012 Çarşamba

if( fork() ) ????

if(fork()) nedir? if( fork() ) aslında if( fork() != 0 ) yani fork komutunun geri dönüş değerine göre child mi yoksa parent mi döndürecek onu göstermektedir.Bildiğimiz gibi sıfır dönerse child,sıfırdan farklı dönerse parent olduğunu gösterir.Eğer -1 döndürürse hata verir bunuda unutmayalım


#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>




int main()
{
pid_t cocuk_pid;
printf("Parent process id = %d\n", (int)getpid() );
cocuk_pid=fork();


if (cocuk_pid!=0)
{
printf("burası parenttir , process id =%d\n",(int)getpid());
printf("child process id = %d\n",(int)cocuk_pid);
}
else
{
printf("burası child processdir, process id=%d\n", (int)getpid());
}
return 0;
}


5 Mart 2012 Pazartesi

Ubuntu'da .rar dosyasını açmak

1.Adım
Uygulamalar(Applications)>Donatılar(Accessories)>Uçbirim(Terminal)
Karşımıza çıkan komut satırına
sudo apt-get install rar yazılır

2.Adım
Mevcut .rar uzantılı dosyamıza sağ tıklanıp Buraya çıkart kısmına basılarak aynı isimli dizinde dosyamız rardan dışarı çıkartılır.Hayırlı olsun :D

3 Mart 2012 Cumartesi

Ubuntu'da C kodu yazmak ve çalıştırmak

1.Adım
Uygulamalar(Applications)>Donatlar(Accessories)>Uçbirim(Terminal) açılır
2.Adım
Karşımıza çıkan konsola gedit deneme.c yazılır
deneme kısmına dosyanın adı yazılır örnek olsun diye deneme yazdım.

3.Adım
Kodu yazdıktan sonra karşınıza editör çıkacak.Burası C kodumuzu yazacağımız yerdir.Örnek olarak basit bir C kodu yazılmıştır.
4.Adım
Kodumuzu yazdıktan sonra kaydedip kapatıldıktan sonra konsola geri dönülür.Yanlız kaydetmeyi unutmayın yoksa dosyanız yazdığınız gibi derlenip çalışmaz.
Konsola gcc -c deneme.c yazılır.Yazdıktan sonra deneme.c nin bulunduğu dosyanın içinde deneme.o adında bir dosya oluşur
5.Adım
Konsol satırına gcc deneme.o -o deneme yazılır
Burada gcc kullandığımız c derleyicimizin adı.deneme.o object dosyası dediğimiz deneme.c dosyasından türetilmiş makine kodlarını barındıran dosyadır. -o komutu object dosyasını çalıştırılabilir bir programa dönüştüren koddur.deneme ise çalıştırılabilir C programımızın adıdır.
Yazdıktan sonra konumda çalıştırılabilir deneme adında çalıştırılabilir dosya oluşacaktır.
6.Adım
Konsol satırına ./deneme yazılarak C programımız çalıştırılır.

THE END