C ile Çevre (ENVIRONMENT) Değişkenlerini Kullanmak

Açık Kaynak, Programlama, tutorial, ytulinux

Önemli bir konu olan çevre değişkenlerinin c içerisinde kullanılması konusuna biraz eğilelim.

Diyelim ki bir program yazdık, ve programa ait bir takım ayarları home dizini altında saklamak istiyoruz. Bunun için $HOME değişkenini programın içerisine bir şekilde almamız gerekir. stdlib.h içerisindeki char * getenv(char * str1) fonksiyonu bize bunu sağlar. Bunun için bir örnek program yazdım, şöyle bir bakmanızla getenv in nasıl kullanıldığını anlayabileceğiniz bir program. Tabi programımız çok da basit olmasın diye for kullanımına dair bir çakallığı da göstermek istiyorum :)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{

char * user = getenv(“USER”);
printf(“USER değişkeni: %s\n”,user);
char * home = getenv(“HOME”);
printf(“HOME değişkeni: %s\n”,home);
char * path = getenv(“PATH”);
printf(“PATH değişkenleri:\n”);
char * parca;
parca = strtok(path,”:”);
for (printf(“  %s\n”,parca);parca=strtok(NULL,”:”);printf(“  %s\n”,parca));

return 0;
}

Öncelikle path değişkenimize dair bir açıklamada bulunayım, path değişkeninde birçok dizin, “:” ile ayrılmış vaziyette bulunur. Bizim istediğimiz şey, strtok ile bu parçaları tek tek alıp ekrana yazdırmak. Strtok a ait önemli bir özellik var, ilk seferinde strtok u hangi diziyi parçalayacaksak onunla çağırıyoruz, sonra da NULL pointer ile çağırıyoruz ki aynı diziye kaldığı yerden devam etsin.

parca = strtok(path,":");
for (printf("  %s\n",parca);parca=strtok(NULL,":");printf("  %s\n",parca));

Evet bütün iş burada. Strtok fonksiyonunu ilk sefer işaretçiyle, ikinci sefer NULL işaretçiyle çağırmak zorunda olduğumuzdan tekrar var. Yoksa iki fonksiyon çağrımı bu işi bitirecekti. For ile ilgili ve c nin en sevdiğim yön, for un belli bir kalıba bağlı olmamasıdır. For ile istediğimiz atraksiyonu yapabiliriz.

printf("  %s\n",parca);

For a ait ilk argüman, for ilk çalıştığı zaman çalıştırılacak olan komuttur, yani ilk döngüye gelindiğinde, döngüye girilecekse de girilmeyecekse de bu komut bir kere çalıştırılır, sonra bir daha çalıştırılmaz.

parca=strtok(NULL,":");

İkinci argüman, Döngüye girilip girilmeyeceğine karar veren kısımdır. Bildiğiniz gibi 0 dan farklıysa döngüye girilir, değilse girilmez. Burada bir çakallığımız daha var gördüğünüz gibi, parca=strtok(NULL,”:”); yazmışız. Burada olan şey şu; strtok un döndürdüğü işaretçi parca değişkenine atanıyor, arkasından da eğer parca değişkeni 1 ise döngüye giriliyor, değilse girilmiyor.

printf("  %s\n",parca);

Üçüncü argümanımız, döngüye girildiği zaman, döngüye ait bloğun sonunda ve her seferinde çalıştırılan komuttur. Parça almayı başardığımız her seferinde bu parçayı çalıştırmamız gerektiği için, bu komutu da son argüman olarak kullanıyoruz.

Eveeet, bugs bunny edasıyla hepsi bu (burasını çok düşündüm, folks yerine ne kullansam diye, sonunda beyler bayanlar merdivenden kayanlar şeklinde iğrenç bir espriye karar verdim :D) diyor, ve sizlere veda ediyorum :)

Bu yazı toplamda 2333, bugün ise 0 kez görüntülenmiş

No Comments