Komut Satırı Argümanları – Command Line Arguments
Linux gibi bir işletim sisteminde çalışıyorsanız belki bazı hazır araçlar dikkatinizi çekmiştir. Komut satırına “nmap 192.168.1.1” yazdığınız zaman nmap adlı program çalışacak ve 192.168.1.1 ip adresi üzerinde bazı işlemler gerçekleştirecektir. Bunun gibi işlemler yapmak için komut satırı argümanları nasıl kullanılır iyi anlamak gerekiyor.
Programı daha açmadan belirli argümanlar ile dışarıdan çalıştırabiliriz. Önce program ismi daha sonra programın kullanacağı argümanları doğru sıralar ile girerek bu işlemi gerçekleştirebiliyoruz. Tabi bir programı bu şekilde dışarıdan kontrol etmek için kodlarımızı da ona göre düzenlememiz gerekiyor.
Komut Satırı Argümanları Nasıl Çalışır?
Komut satırı argümanları main() fonksiyon argümanları kullanılarak işlenir. Kullanacağımız iki adet argüman var: “int argc ve char *argv[]“. İlk argüman olan argc, programa dışarıdan girilen değerlerin sayısını tutar. İkinci argüman argc[] ise, char tipinde bir pointer array’dir. Programa dışarıdan girilen değerleri işaret eder.
Aşağıdaki basit program, programa komut satırından girilen bir değerin olup olmadığını kontrol eder.
#include <stdio.h> int main( int argc, char *argv[] ) { if( argc == 2 ) { printf("Girilen arguman: %s\n", argv[1]); } else if( argc > 2 ) { printf("Cok fazla arguman girildi.\n"); } else { printf("Bir arguman bekleniyor.\n"); } }
Yukarıdaki program derlendikten ve bir argüman ile çalıştırıldıktan sonra aşağıdaki çıktıyı verecektir. (Komut satırından program nasıl derlenir bilmiyorsanız yazının en alt kısmındaki Programı Derleme başlığından öğrenebilirsiniz.)
$./a.out onur Girilen arguman: onur
Program iki argüman ile çalıştırılmaya çalışılırsa aşağıdaki çıktıyı verecek.
$./a.out onur sanir Cok fazla arguman girildi.
Program herhangi bir argüman olmadan çalıştırıldığında ise aşağıdaki çıktıyı verecek.
$./a.out Bir arguman bekleniyor.
Dikkat ettiyseniz programın içerisinde argv[1] i yazdırdık, argv[0] programın ismini tutar ve argv[1] programa girilen ilk argümanı gösterir. Eğer programı herhangi bir argüman girmeden çalıştırırsanız argc ‘nin değeri 1 olacaktır, bir argüman girerseniz ise argc ‘nin değeri 2 olacaktır. Eğer olayı daha iyi anlamak isterseniz github.com/osanir/c-examp/tree/master/command-line-arg linkindeki dosyaları indirerek inceleyebilirsiniz.
Programa girilen argümanlar boşluk işareti ile ayrılır. Eğer bir argümanız boşluk içeriyorsa program bunu iki farklı argüman olarak algılayacaktır. Yukarıdaki program iki argüman girildiğinde, örneğin onur sanir girildiğinde “Cok fazla arguman girildi” çıktısını verecek. Bu gibi durumlarda tırnak işaretlerini kullanarak boşluk içeren argümanları da kullanabiliriz.
Şimdi yukarıdaki programı, tırnak işaretleri kullanarak boşluk içeren bir argüman ile çalıştıralım.
./a.out "onur sanir"
Çıktı:
Girilen arguman: onur sanir
Programı Derleme
Eğer bir program, komut satırından nasıl derlenir biliyorsanız bu kısmı atlayabilirsiniz.
Yukarıda bulunan programı masaüstünde oluşturup derleyeceğiz ve çalıştıracağız. Öncelikle terminali (uçbirim) açın.
Şu komut ile Masaüstüne gelin.
cd Desktop/
main.c isminde bir dosya oluşturalım:
touch main.c
main.c dosyamızı nano editörü ile açalım:
nano main.c
Kodları içerisine yapıştırdıktan sonra “ctrl x” ile programı kaydedebilirsiniz. Size kaydetmek ister misiniz şeklinde sorular gelecektir, “E” diyerek bu kısımları da tamamlayın.
Şimdi main.c dosyamızın içerisinde kodlarımız var. Bu programın çalıştırılabilmesi için derlenmesi gerekiyor.
Derlemek için şu kodları girelim:
gcc main.c
Şimdi programımız derlendi. “ls” komutu ile bulunduğunuz dizindeki dosyaları ve klasörleri listeleyin. “main.c” ve “a.out” adındaki dosyaları göreceksiniz. main.c bizim oluşturduğumuz, içine kodları yerleştirdiğimiz dosya ve a.out ise bizim derlenmiş, çalıştırılmaya hazır dosyamız.
a.out dosyasını onur adında bir argüman ile çalıştırmak için şu komutları yazmalıyız.
./a.out onur
Gördüğünüz gibi programımız bize şu çıktıyı verecek:
Girilen arguman: onur
Birden fazla argüman girmek isterseniz:
./a.out onur sanir
Şeklinde girebilirsiniz.