Linux C++ Kodlarının Yazılması
Nano bir komut satırı editörü vi ya da bir grafik editörü
olan gedit gibi bu editörler
yardımıyla programları yazılıp, kaydetme imkanı sağlar.
Komutla eğer HelloWorld.cpp adlı dosya oluşmamışsa oluşturur varsa da üzerine yazılır. Ayrıca Linux’ta her ne kadar dosya uzantılarının bir önemi olmasa da C++ dosyalarının uzantısı derleme aşamasında hatayla karşılaşmamak için .cpp olmalıdır.
[root@localhost ~]# nano HelloWorld.cpp
Editör yardımıyla yazılan programı derleyip çalıştırabilirsiniz. Bu işlem için Linux sisteminde kurulu bulunan g++ adlı C++ derleyicisinden faydalanılır.
[root@localhost ~]# g++ HelloWorld.cpp [root@localhost ~]# ls a.out Desktop HelloWorld.cpp install.log install.log.syslog
[root@localhost ~]# g++ HelloWorld.cpp –o output.x [root@localhost ~]# ls a.out Desktop HelloWorld.cpp install.log install.log.syslog output.x
Linux C++ Kodlarının Çalıştırılması
Derleme işlemi başarıyla sonlandırılır ise derleme yapılan dizinde a.out adında executable (çalıştırılabilir) bir dosya oluşur. Bu dosya komut satırında çalıştırabilir.
[root@localhost ~]# ./a.out Hello World! [root@localhost ~]# ./output.x Hello World!
argc ve argv Parametreleri
C++ kodlarında main fonksiyonu içinde kullanılan argc (argument count) adlı, int veri tipindeki ilk argüman programın çalıştırılması esnasında komut satırından girilen komutların/kelimelerin sayısını belirtir.
[root@localhost ~]# ./output.x –n 15 –burak
Örnekte argc(argüman sayısı) 4 olarak değerlendirilir. Çalıştırılan programın adı da argüman sayısına eklenir.
C++ kodlarında main fonksiyonu içinde kullanılan argv parametresi ise komut satırından girilen parametrelere (karakter dizileri) pointer
tutan bir dizidir.
Örnekte argv elemanları:
argv[0] = ./output.x
argv[1] = -n
argv[2] = 15
argv[3] = -burak
argv[1][0] = - ve argv[1][1] = n
argv[3][0] = - , argv[3][1]
= b, argv[3][2] = u, argv[3][3] = r, argv[3][4] = a, argv[3][5] = k
#includeusing namespace std; int main(int argc, char* argv[ ]) { return 0; }
Kod bloğu komut satırından çalıştırılan bir C++ programının argümanlarını alt alta ekrana
basacaktır.
Windows İşletim Sisteminde Program Performans Analizi
Yazılan Hello World! uygulaması Kod Bloğunda çalıştırılırsa:
Bir sonraki yazımda görüşmek üzere...
#includeusing namespace std; int main(int argc, char* argv[ ]) { for(int i=0; i < argc; i++) printf(argv[i]); return 0; }
atoi ve
atof Fonksiyonları
Komut satırından girilen
her türlü parametre argv dizisi içerisinde string olarak saklanır. (Sayısal olarak girildiği düşünülen argümanlar bile) Bu yüzden bu
parametrelerin sayısal değerlere dönüştürülmesi gerektiğinde atoi ve atof fonksiyonlarına ihtiyaç duyulur.
atoi (char *str): Fonksiyon kendine argüman olarak aldığı stringi
integera çevirir.
atof (char *str): Fonksiyon
kendine argüman olarak aldığı stringi ondalıklı sayıya(floating point) çevirir.
atoi ve atof fonksiyonlarını
C++ programlarımızın içinde kullanabilmek için standart
kütüphaneden <cstdlib> header dosyasını programımızın başına eklemeliyiz.
#includeusing namespace std; int main(int argc, char* argv[ ]) { int count=atoi(argv[1]); for(int i=0; i < count; i++) printf("Hello World!"); return 0; }
[root@localhost ~]# ./a.out 5 Hello World! Hello World! Hello World! Hello World! Hello World!C++ Programlarının Performans Analizleri
Çalıştırılabilir C++ programlarının CPU tarafından ne kadar sürede
işletildiğini hesaplayan time adında bir Linux komutu vardır. time komutuna argüman olarak çalıştıracağımız executable dosyanın adı verilmelidir.
[root@localhost ~]# time ./a.out 5 Hello World! Hello World! Hello World! Hello World! Hello World! real 0m0.002s user 0m0.000s sys 0m0.002s
real
|
Programın çalıştırılmaya başlandığı an ile çalışmasının bittiği an arasında geçen reel süredir. (Wall Clock Time)
(Çalıştırılabilir dosyanın harddiskten belleğe getirilme süreside eklenir.)
|
user
|
CPU’nun kullanıcının bir işlemini gerçekleştirmek üzere harcadığı zaman. (CPU Time)
|
sys
|
Sistem tarafından kullanılan toplam CPU süresidir. (İşletim sisteminin programı işletirken harcadığı
CPU zamanıdır.)
|
Windows İşletim Sisteminde Program Performans Analizi
#include#include using namespace std; int main(int argc, char* argv[ ]) { clock_t start, stop; double currentTime; start=clock(); //Kod Bloğu stop=clock(); currentTime =(stop – start )/(double)CLOCKS_PER_SEC; printf("Şimdiki zaman: %d\n",currentTime); return 0; }
Linux
İşletim Sisteminde Program Performans Analizi
#include//sys/time #include using namespace std; int main(int argc, char* argv[ ]) { struct timeval currentTime; double start,stop,elapsedTime; gettimeofday(¤tTime, NULL); //devir süresi (sn) start=currentTime.tv_sec+(currentTime.tv_usec/1000000.0); //Kod Bloğu gettimeofday(¤tTime, NULL); //devir süresi (sn) stop=currentTime.tv_sec+(currentTime.tv_usec/1000000.0); //geçen süre hesaplanır elapsedTime = stop-start; printf("Gecen zaman (sn): %d\n",elapsedTime); return 0; }
Yazılan Hello World! uygulaması Kod Bloğunda çalıştırılırsa:
Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Gecen zaman (sn): 0.000137091
Süre ölçümü için <sys
/ time.h> kütühanesi tanımlanmıştır. timeval iki integer bileşene sahiptir.
Bileşenlerinden biri tv_sec 01/01/1970 tarihinden itibaren çalıştırılıdığı ana
kadar tutulan saniye değeridir. Diğer bileşeni ise mikrosaniye değeridir. Ölçülen
mikrosaniye 1000000 değerine bölünerek saniyeye eklenir.
Bir sonraki yazımda görüşmek üzere...