Ekim 2008


Operating systems ödevimi yaparken ihtiyacım olan ve bu güne kadar hiç kullanmadığım bir olayla karşılaştım C programlama dili üzerinde.

Eğer programımıza komut satırında çalıştırırken parametre girmemiz gerekirse bu işi nasıl yaparız?

Cevabı internette biraz araştırma yaptıktan sonra şu ana kadar parametresini hep void ile doldurduğum main fonksiyonuna parametre girmekle yapılacağını öğrendim. Şimdi bu iş nasıl gerçekleşiyor bakalım.

Örnek programımızın adı program.c olsun. program.c içerisinde main fonksiyon prototipimizi şu şekilde yazalım:

int main(int argc, char * argv[])

argc ve argv sıklıkla kullanılan değişken isimleridir. Tabi ikisi de değişken olduğu için isimlerini dilediğiniz şekilde değiştirebilirsiniz. Ardından programımızı gcc ile derleyelim:

xaph@linux$ gcc program.c

Son olarak ise programımızı çalıştırırken girmek istediğimiz değişkenleri girelim:

xaph@linux$ ./a.out degisken1 degisken2 degisken2

Bu şekilde çalıştırılan programımızda argc konsoldan girilmiş olan toplam input sayısını tutar. Bizim örneğimiz için bu değer 4tür. Main fonksiyonuna girmek istediğiniz değişkenler ise argv string arrayinde tutulmaktadır. argv[0] programımızın adını tutar. argv[1] den argv[3] e kadar olan dizi ise sırasıyla girdiğimiz degisken1, degisken2, degisken3 değerlerini tutar. Bu değişkenleri programınız içerisinde dilediğiniz gibi kullanabilirsiniz.

Konsoldan integer girişi:
Şu ana kadar girdiğimiz ve kullanmak istediğimiz değişkenler string veri türündeydi. Peki biz programımıza tamsayı girdisi yapmak istersek ne yapmalıyız?

Main fonksiyonunda kullandığımız prototip önceden tanımlı bir durumdadır. Dolayısıyla ikinci parametre olan char* veri türünde değişiklik yapamıyoruz. Bu da gireceğimiz her sayının karakter dizesi olarak tutulması anlamına geliyor. String veri türündeki bir tamsayıyı nümerik veri türlerine çevirmek için standart C kütüphanesinde atoi, atol, atof, strtol gibi fonksiyonlar bulunmakta. En çok kullanılanı olduğu için kısaca atoinin kullanıldığı bir örnek koda bakalım.

#include <stdio.h>
int main(int argc, char* argv[])
{
    int i;
    i=atoi(argv[1]);
    printf("%d", i);
}

Bu şekildeki bir programı derleyip parametre olarak integer değeri girdikten sonra, girdiğiniz değeri çıktı olarak basacaktır. Tabi çıktı sayının integer veri tipine çevrilmiş haliyle basılır.

Artık tek yapmanız gereken konsoldan aldığınız parametreleri istediğiniz hale getirip kullanmak. İyi kodlamalar.

Bu gece bitmeden file management dersinin labını bitirmem lazım.

Yarın sabah 10.50ye kadar operating systems dersinin ilk ve zorlu ödevini yapıp vermem lazım.

Yarın gün içinde analysis of algorithms dersinin bol seçenekli homeworkunu tamamlanmalı.

Bir de geçen haftadan sarkıttığım operating systems labının gönderilmesi lazım.

Biliyorum bu kadar şey bir gün içerisinde verilmedi ve son güne ben bıraktım ama yine de bütün her şey bir güne mi sıkışır diye düşünmeden edememekteyim. Artık başa gelen çekilir diyerek başlamam lazım. Sabaha kadar kod yazmak eylemini gerçekleştireceğim bu sefer kısmetse.

dagıtımlarım

Her ne kadar kendimi bildim bileli linux kullanma isteğim olsa da üniversiteye başlayana kadar böyle bir şansım olmadı. Ancak 1. sınıfa geçip de kendi bilgisayarıma sahip olduktan sonra “linux kullanıcısı” kategorisine girdim. Gerçi bir daha da o kategoriden çıkmayı düşünmüyorum ama konumuz o değil.

Bilgisayarıma ilk linux kurma girişimim pardus 1.0 ile olsa da pardusun o zamanki asus anakartlarla çalışmaması problemi yüzünden yalan olmuş bir girişimdi. Ardından elime geçen bir ubuntu 6.04 cd’si ile kendimi özgür hissetmeye başladım:) O zamandan bu yana da arada denediğim bir çok dağıtıma rağmen ubuntu benim ana dağıtımım oldu. Ubuntu’nun sağlamlığına ve kendi deliliğime güvenerek bilgisayarımda başka bir işletim sistemi bulundurmayacak kadar da bağlıyım dağıtımıma.

Ancak ne kadar iyi olursa olsun şu anda isteklerimle çelişen şeyleri bulunmakta ubuntunun. Bundan dolayı yeni bir dağıtıma geçiş yapma kararı aldım. Haydi hayırlısı.

Öncelikle ubuntu neden benim için iyi bir dağıtım değil ordan başlamak lazım.
- Her ne kadar işleri basitleştirse de ubuntu bir son kullanıcı dağıtımı. Bilgisayar mühendisliğinde okuyan ve linux kullanıyorum diyen benim için konsoldan bu kadar uzak olmak yakışık almıyor:)
- Sistemde neler olup bittiği, dosya yapısı, çalışan servisler ile ilgili bir bilgim yok. Ubuntu beni öğrenmeye zorlamıyor. Tembel adamım ben, iş çıkmadıkça yapmıyorum ama öğrenmek istiyorum.
- Her kurulumdan sonra bir de anti-kurulum yapmak zorunda kalıyorum çünkü bilgisayarımda bluetooth olmamasına rağmen bütün programlar kurulu, bluetooth çalışır durumda geliyor. Aynı şey yazıcı için de geçerli, onları hiç ellemesem öylece kalsalar da olur ama siliyorum yine de.
- Kurulmuş paketlerin ne olduğunu ve ne iş yaptıklarını bilmiyorum. Kurulum aşamasında işleri bana bırakmıyor, kendisi hallediyor(bu aslında güzel bir şey ama benim için değil:)

Şimdi gelelim alternatiflere:

Archlinux
Alper Kanat‘ın günlüğünden öğrendiğim ve staj yaparken elimin altındaki bilgisayarların biraz eski bilgisayarlar olması sebebi ile kurup kullandığım archlinux; paketleri i686 mimarisine göre düzenlenmiş olabildiğince basit olabildiğince esnek kurulmuş, bunun yanında kararlılığı da gözümü kamaştıran bir dağıtım. İlk kullandığım zaman çok basit gelmesine rağmen sonrasında bir takım işlerin emek istemesi ve o zamanki zaman kıtlığı sebebiyle kullanmaktan vazgeçtiğim bir dağıtımdı Arch. Bilgisayarımdan kaldırmış olsam da aklımdan kaldıramadım ve tekrar kurma aşamasındayım.

Gentoo
Duyduğum andan beri kendisine karşı bir sempati beslediğim bir dağıtım gentoo.Her ne kadar anında kurup kullanmak istesem de dağıtımın kendine özel olması sebebiyle malesef böyle bir şansa sahip değilim. Sebebi ise kurulum işleminin günler hatta haftalar sürmesi. Genel mantık olarak her paketin bilgisayara özel derlenmesini öngören gentoo bu sayede performanstan %20lere kadar artış sağladığını öne sürüyor ki kullanan kişilerin de aynı şeyi savunduğunu söylememe gerek yok sanırım. Benim açımdan tek sorunu devasa kurulum belgelerine sahip olması ve gerçekten zaman istemesi. Gerçi Burak kişisinin her konuşmamızda ya da her günlük yazısında iştahımı kabartması o zamanı bana harcatacak gibi duruyor.

Şu an için genel planım kurulu Ubuntu’yu bozmadan öncelikle Archlinux’u kurup kullanmak, ardından da uzun vadede Gentoo kurulumu yapıp ona geçiş yapmak. Her iki dağıtım için de genel değerlendirmeyi bir süre kullandıktan sonra yapmayı düşünüyorum.

Bakalım dağıtım savaşları beni nereye götürecek :)

Eğer Ubuntu 7.04 ve üstü bir sürüm kullanıyorsanız tasksel sayesinde tek komutla LAMP server kurulumu yapabilirsiniz. Bunun için konsoldan:

sudo tasksel install lamp-server

komutunu yazıp onaylamanız yeterli olacaktır. Kurulum esnasında sizden mysql root parolası isteyecektir. Dilediğiniz değeri verebilirsiniz.

Bu aşamadan sonra http://localhost/ bağlantısını tıklayarak çalışan apache sunucunuzu görebilirsiniz. Yazacağınız kodların sunucu üzerinde çalışması için kodlarınızı /var/www dizininde saklamanız gerekmektedir.

Buraya kadarı basit bir LAMP kurulumuydu. Şimdi biraz detaya inelim.

Kurulan Paketler:

Web sunucumuzu tasksel kullanarak yaptığımız için öntanımlı paketler yüklenmiştir. Bu öntanımlı paketler şunlardır:

apache2 apache2-mpm-prefork apache2-utils apache2.2-common libapache2-mod-php5 libapr1 libaprutil1 libdbd-mysql-perl libdbi-perl libmysqlclient15off libnet-daemon-perl libplrpc-perl libpq5 mysql-client-5.0 mysql-common mysql-server mysql-server-5.0 php5-common php5-mysql

Kullanıcı Dizini Oluşturmak:

Biraz önce de yazdığım gibi yazacağınız kodlar için öntanımlı klasör /var/www klasörüdür. Ancak bu klasör üzerine yazma hakkınız bulunmadığından ve her seferinde root yetkileriyle çalışmak güvenli olmadığı için /home klasörünüz içerisinde bir web dizini oluşturabilirsiniz. Bunun için sırasıyla şunları yapmanız yeterlidir:

  • İstediğiniz bir metin düzenleyici(gedit, nano, vi ..) kullanarak ayar dosyamızı açalım.
    sudo gedit /etc/apache2/sites-available/default
  • Document Root satırını bularak orada yazan dizin yolunu istediğimiz şekilde değiştirelim. (Örnek olarak /home/kullanıcı_adiniz/public_html)
  • <Directory /var/www/> olan kısmı <Directory /home/kullanıcı_adiniz/public_html/> şeklinde değiştirelim.
  • Son olarak sunucumuzu yeniden başlatalım.
    sudo /etc/init.d/apache2 restart

Artık /home/kullanıcı_adiniz/public_html/ klasörü sizin web dizininiz olacaktır.

PhpMyAdmin’i kurmak:

PhpMyAdmin veritabanı tablolarınızı yönetmek, yeni tablolar oluşturmak gibi işlemleri yapmak için oldukça kullanışlı bir araçtır. Kurulumu için öncelikle konsoldan

sudo apt-get install phpmyadmin

yazıp onaylamalıyız. Bu aşamada sistemimize phpmyadmin kurulmuş oldu ancak bunu bir de web sunucumuza belirtmeliyiz. Bunun için öncelikle

sudo gedit /etc/apache2/apache2.conf

komutu ile apache ayar dosyamızı açmalıyız. Daha sonra

Include /etc/phpmyadmin/apache.conf

satırını ayar dosyamızın en altına yazmalıyız. Böylece apacheye phpmyadmini göstermiş olduk.

Son olarak

sudo /etc/init.d/apache2 restart

komutu ile sunucumuzu yeniden başlatmalıyız. Artık http://localhost/phpmyadmin bağlantısı ile phpmyadmin’e ulaşabilirsiniz.

Sunucunuzu güle güle kullanın :)

Windows’tan Gnome masaüstü yöneticisi kullanan Linux dağıtımlarına(özellikle Ubuntu) geçen kullanıcıların kullanım alışkanlıklarına ters gelen şey, Gnome masaüstünde Bilgisayarım, Belgelerim gibi simgelerin olmamasıdır. Bu simgelerin işlevlerini üst paneldeki Gnome menüsü ne kadar yerine getirse de alışkanlıklardan vazgeçmek kolay olmuyor.

Peki Gnome masaüstü yöneticisinde bu simgeleri nasıl oluştururuz:

1- Öncelikle “Alt+F2″ kısayolunu kullanıp “Uygulama Çalıştır”ı başlatarak veya Uygulamalar>>Donatılar menüsünden terminali çalıştırarak

gconf-editor

yazalım ve onaylayalım.

2- Ardından karşımıza gelen “gconf-editor” penceresinde apps>>nautilus>>desktop yolunu bulalım.

3- Burdan sonra tek yapmamız gereken kullanmak istediğimiz simgenin yanındaki kutuyu işaretlemek.
Bilgisayarım için  –> computer_icon_visible
Ev klasörünüz için –> home_icon_visible
Ağ için –> network_icon_visible
Çöp kutusu için –> trash_icon_visible
kutularını işaretlemeniz yeterli olacaktır.

Güle güle kullanın :)

Sonraki Sayfa »