[LinuxFocus-icon]
<--  | Ana Sayfa  | Eri�imd�zeni  | ��indekiler  | Arama

Duyumlar | Belgelikler | Ba�lant�lar | LF Nedir
Bu makalenin farkl� dillerde bulundu�u adresler: English  Deutsch  Francais  Nederlands  Russian  Turkce  

[Photo of the Author]
Bob Smith
<bob/at/linuxtoys.org>

Yazar hakk�nda:

Bob, Linux programc�s�d�r ve hobisi elektroniktir. Onun en son projelerini www.runtimeaccess.com'dan ve www.linuxtoys.org ana sayfas�ndan ��renebilirsiniz.



T�rk�e'ye �eviri:
�zcan G�ng�r <ozcangungor(at)netscape.net>

��erik:

 

�al��an Bir ��lem ile Konu�mak

Run Time Access

�zet:

�al��ma An�nda Eri�im(Run Time Access), program�n�zdaki veri yap�lar�n� PostgreSQL'de tablolar olarak ya da sanal dosya sisteminde (/proc benzeri) bir dosya olarak alman�z� sa�layan k�t�phanedir. �AE kullanarak artalan s�recinize (daemon) ya da hizmetinize �e�itli y�netim aray�zleri ekleyebilirsiniz. �rne�in web, kabuk, SNP ya da �er�eve belle�i.

_________________ _________________ _________________

 

10 Saniyelik Genel Bak��

Yap� katarlar�nda verilerinizin oldu�u bir program�n�z olsun. Yap� ve katar �u �ekilde tan�mlanm��t�r:
struct mydata {
    char   note[20];
    int    count;
}

struct mydata mytable[] = {
  { "Lable note", 100 },
  { "Music note", 200 },
  { "No note", 300 },
};

E�er program�n�z� �AE ile yazarsan�z, program�n�z�n i� verilerini sanki PostgreSQL veritaban�ndaym�� gibi komut sat�r�ndan ya da ba�ka bir programdan de�i�tirebilir ve inceleyebilirsiniz. A�a��daki �rnek, progarm�n�zdaki verileri Bash ve psql (PostgreSQL komut sat�r� arac�) ile nas�l okuabilece�inizi ve de�i�tirebilece�iniz g�sterir:

# myprogram  &

# psql -c "UPDATE mytable SET note = 'A note' LIMIT 1"
UPDATE 1

# psql -c "SELECT * FROM mytable"
   note     | count
------------+-------
 A note     | 100
 Music note | 200
 No note    | 300

#

Bu makale, �AE gibi bir �eye neden gereksinim duyuldu�unu, RTA k�t�phanesinin nas�l kullan�laca��n� ve �AE kullanarak ne gibi avantajlar sa�lanaca��n� a��klayacakt�r.

 

 

Bir�ok Kullan�c� Aray�z� - Tek Hizmet

Var olagelen UNIX, bir hizmet ile ayar verilerini /etc/hizmet.conf dosyas�na koyarak ileti�irdi ve hizmetin olu�turdu�u ��k�� /var/log/hizmet.log dosyas�na yaz�l�rd�. Bu kabul edilmi� yakla��m, cihazlar �zerinde �al��an ve e�itimsiz sistem y�neticileri taraf�nda ayarlanan g�n�m�z hizmetleri i�in b�y�k olas�l�kla yanl��t�r. Bu var olagelen yakla��m i�e yaram�yor ��nk� art�k �e�itli, ayn� anda �al��an kullan�c� aray�zleri istiyoruz ve her aray�z�n hizmet ile ayalar�, durumu ve istatistikleri, hizmet �al���rken de�i�tirebilmesini istiyoruz. Gereken �ey, �al��ma an�nda eri�im.

Yeni hizmetler, �ok �e�itli kullan�c� aray�zlerine gereksinim duyuyorlar ve biz geli�tiriciler, en �ok hangi aray�ze gereksinim duyulaca��n� �nceden kestiremeyebiliriz. Yapmam�z gereken, ortak protokolleri kullanarak, kullan�c� aray�zlerini hizmetten ay�rmal�y�z ve ortak protokolleri kullanarak aray�zleri olu�turmal�y�z. Gereksinim duyuldu�unda yeni aray�z eklemek b�ylece daha kolay olur ve ay�rma testleri kolayla�t�r�r ��nk� her par�a ayr� ayr� test edilebilir. �una benzer bir yap� istiyoruz:

Tek hizmet -- çok arayüz

Aray�z �e�itleri �unlar olabilir: web, komut sat�r�, �er�eve belle�i, SNMP, tu�tak�m� ve LCD, LDAP, do�al Windows ve di�er iste�e ba�l� aray�zler. A��k�a b�t�n kullan�c� aray�zlerine tek ortak API ve protokol iyi olurdu ama hangi �e�it API ve protokol?

 

 

Bir Veritaban� Aray�z�

�AE, ortak API ve protokol olarak PostgreSQL'i kullanmay� se�mi�tir. Ayarlama, durum ve istatistikler, API �zerinde PostgreSQL veritaban�ndaki tablolar olarak g�r�nen yap� dizilerine konur. Kullan�c� aray�z� programlar�, bir PostgreSQL veritaban�na ba�lanan istemciler olarak yaz�l�r. Bu yakla��m�n iki b�y�k faydas� vard�r:

�AE k�t�phanesi, dizileri, ba�l� listeleri ya da veri yap�lar�n� PostgreSQL istemcilerine ba�layan bir yap��t�r�c�d�r. �AE kullanan uygulaman�n mimarisi �una benzer...

ÇAE Uygulama Mimarisi

Bunu y�netim aray�z� olarak adland�r�yoruz ��nk� durumu, istatistikleri ve ayarlar� g�stemesi beklenmektedir. Sadece bir aray�z�n g�r�mesine ra�men, daha �ok aray�z�n olabilece�ini unutmay�n ve hepsi ayn� anda uygulamaya eri�ebilir.

PostgreSQL, ula��m protkol� olarak TCP'yi kullan�r. Uygulaman�z bir TCP portuna ba�lanabilmeli ve �e�itli kullan�c� aray�zlerinden ba�lant�lar� kabul edebilmelidir. Kabul edilmi� bir ba�lant�dan gelen b�t�n baytlar dbcommand() ile �AE'ye aktar�l�r. Bir istemciye d�necek olan veriler, dbcommand()'dan d�nen bir tampondad�r.

�AE, hangi tablolar�n kullan�labilir oldu�unu nereden biliyor? Bunu s�ylemek zorundas�n�z.

 

 

Tablolar� Tan�mlama

�AE'ye veri yap�lar� olan tablolar�n�z hakk�nda rta_add_table() fonksiyonu ile bilgi verirsiniz. TBLDEF veri yap�s�, bir tablo tasvir eder ve COLDEF yap�s�, bir s�tun tasvir eder. A�a��da �AE'ye nas�l bir tablo ekleyece�inizi g�sterir:

Uzunlu�u 20 karakter olan bir katara sahip bir veri yap�s�na sahipsiniz ve bu yap�da olan 5 tabloyu d�� ortama ta��mak istiyorunuz.Yap�y� ve tabloyu �u �ekilde tan�mlars�n�z:

    struct myrow {
        char    note [20];
        int     count;
    };

    struct myrow mytable[5];

myrow veri yap�s�ndaki her alan, veri taban� tablosundaki bir s�tundur. �AE'ye, s�tunun ismini, hangi tablo i�inde oldu�unu, veri tipini, sat�r�n ba�lang�c�n� refarans alarak yerini, salt-okunur olup olmad���n� bildirmeliyiz. Bir de s�tun yaz�ld�ktan sonra ve/ve ya okunmadan �nce �a�r�lacak olan geri�a��r�m rutinini eklemeliyiz. Bizim �rne�imizde, count salt-okunurdur ve do_note() fonksiyonu, note s�tununa her yazma i�lemi oldu�unda �a�r�l�yor. TBLDEF'e eklenmi� olan COLDEF dizisini olu�turduk. Her yap� �yesine bir COLDEF kar��lk gelir.

    COLDEF mycols[] = {
        {
            "atable",          // SQL'deki tablo ad�
            "note",            // SQL'deki s�tun ad�
            RTA_STR,           // s�tun/alan i�in veri tipi
            20,                // s�tunun byte olarak geni�li�i
            0,                 // sat�r�n ba�lang��tan uzakl���
            0,                 // boolean bayraklar� i�in bit olarak OR
            (void (*)()) 0,    // okuma'dan �nce �a�r�l�r
            do_note(),         // yazma'dan sonra �a�r�l�r
            "S�tun tan�mlamas�n�n son alan�, s�tunu tan�mlayan bir katar�d�r."
            "Burada isterseniz s�tundaki verinin ne oldu�unu ve tipini a��klayabilirsiniz."},
        {
            "atable",          // SQL'deki tablo ad�
            "count",           // SQL'deki s�tun ad�
            RTA_INT,           // s�tun/alan i�in veri tipi
            sizeof(int),       // s�tunun byte olarak geni�li�i
            offsetof(myrow, count),  // sat�r�n ba�lang��tan uzakl���
            RTA_READONLY,      // boolean bayraklar� i�in bit olarak OR
            (void (*)()) 0,    // okuma'dan �nce �a�r�l�r
            (void (*)()) 0,    // yazma'dan sonra �a�r�l�r
            "E�er tablolar�n�z, kullan�c� aray�z� ile hizmet aras�nda bir aray�z ise  "
            "s�tun ve tablo tan�mlamalar�n�z projrniz i�in i�levsel bir �zellik olur ve geli�tiriciler i�in en iyi dok�mantasyondur.
    };

Yazma geri�a��r�mlar�, uygulaman�z� s�ren ger�ek motorlar olabilirler. Bir tablo de�i�ikli�inin ba�ka bir de�i�ikli�i ya da uygulaman�z�n yeniden ayarlanmas�n� tetiklemesini isteyebilirsiniz.

�AE'yi tablo ismini, her sat�r�n uzunlu�unu, s�tunlar� tan�tan COLDEFS dizisini, s�tun say�s�n�, e�er baz� s�tunlar�n kaybolmas�n� istemiyorsan�z s�tunun kaydedilece�i dosyay� ve tabloyu tan�tan bir katar� vererek tablo hakk�nda bilgilendirirsiniz. E�er tablo yap�lar�n dura�an bir dizisi ise ba�lama adresini ve sat�r say�s�n� vermelisiniz. E�er tablo ba�l� listeler �eklinde uygulan�yorsa �AE'ye bir sat�rdan di�erine ge�meye yard�mc� olacak fonksiyonu vermelisiniz.

TBLDEF   mytableDef = {
      "atable",                 // tablo ismi
      mytable,                  // tablonun adresi
      sizeof(myrow),            // her sat�r�n uzunlu�u
      5,                        // sat�r say�s�
      (void *) NULL,            // iterasyon fonksiyonu
      (void *) NULL,            // iterasyon geri�e��r�m verisi
      mycols,                   // s�tun tan�m�
      sizeof(mycols / sizeof(COLDEF), // # s�tunlar
      "",                       // kay�t dosyas�
      "Tablonun tam bir tan�t�m�."
};

Normal olarak, SQL taraf�ndan g�r�nen tablo ismi ile programda kullan�lan tablo isminin ayn� olmas�n� istersiniz. �rnekte, mytable atable olarak, tablo isimlerinin ayn� olmak zorunda olmad�klar�n� g�sterebilmek i�in de�i�tirildi.

�imdi �AE'ye kendi tablonuzu tan�tabilirsiniz.

    rta_add_table(&mytableDef);

Hepsi bu. �AE'yi kullanabilmek i�in, iki veri yap�s�n� (COLDEF ve TBLDEF) ve iki fonksiyonu (dbcommand() ve rta_add_table()) nas�l kullanaca��n�z� ��renmelisiniz.

Yukar�daki kod, �AE'nin nas�l �al��t���n� g�sterebilmek amac�yla verilmi�tir. Tam bir bilgi kayna�� veya tamamen �al��am bir �rnek olarak verilmemi�tir. �AE API'si ile ilgili tamamen �al��an �rnek ve tam a��klamalar, �AE ana sayfas�ndad�r.

Kendi uygulaman�zda kullana��n�z tablolar� tan�mlad�ysan�z, �AE, kendi i� tablolar�n� tan�mlam��t�r. Bunlardan en ilgin� olanlar�, listelenecek tablolar ve tan�mlad���n�z tablolar� tan�tan rta_tables ve tra_columns tablolar�d�r. Bunlara genellikle sistem tablolar� denir. Sistem tablolar�,ls bir dosya sistemi i�in ne yap�yorsa, getnext SNMP i�in ne yap�yorsa, bir veritaban� i�in onu yapar.

 

 

Tablo Edit�r�

�AE ile birlikte gelen programlamlardan biri k���k bir PHP program�d�r. Bu program ile sistem tablolar�n� web taray�c�s� ile ekranda g�rebilirisiniz. Tablo adlar� k�pr�lenmi�tir ve bir tablo ad� t�kland���nda o tablonun ilk 20 sat�r� g�r�lebilir. E�er sat�r de�i�tirilebilir ise o sat�r t�klanarak d�zenleme penceresi yard�m�yla bilgi de�i�tirilebilir. Bunlar�n hepsi sistem tablolar�ndaki tablo ve s�tun bilgileri yard�m�yla olmaktad�r. Veri ak��� a�a��da g�sterilmi�tir.

Generic Table Editor

�AE �rnek uygulamas� i�in tablo d�zenleyecisinin en �st seviye g�r�nt�s� a�a��dad�r.

�AE Tablo D�zenleyici

Tablo Ad�A��klama
rta_tables Sistemdeki t�m tablolar�n tablosu. Bu asl�nda ger�ekte olmayan(pseudo) bir tablodur ve di�er tablolar gibi yap�lar dizisi de�ildir.
rta_columns B�t�n tablolardaki b�t�n s�tunlar�n b�t�n �zelliklerini de i�eren tablodur.
pg_user Postgres kullan�c�lar�n�n tablosu. Bu tabloyu, WHERE c�mleci�i i�indeki her kullan�c� ismini ger�ek ve s�per kullan�c�, createDB, trace ya da catupd haklar�na sahip de�ilmi� gibi g�stertmek i�in kullan�r�z.
rta_dbg �evrimi�i olmay� ayarlama ya da hata ay�klama. 'target' alan�ndaki bir geri�a��r�m fonksiyonu, syslog()'u kapat�r ve tekrar a�ar. Bu tablodaki hi�bir de�er diske yaz�lmaz. E�er belirlenmi� varsay�lan de�erleri istemiyorsan�z, �AE'nin kodunu de�i�tirmelisiniz ya da SQL_string() yaparak program� ba�latt���n�zda de�erleri verebilirsiniz.
rta_stat �AE paketinin kullan�m� ve hata say�s�
mytable �rnek bir uygulama tablosu
UIConns Bir kullan�c� aray�z�nde yap�lm�� TCP ba�lant�s� hakk�nda bilgi

E�er bu makaledeki her�ey do�ru gittiyse, yukar�da verilen tablo isimleri, Santa Clara'daki �AE' ewb sunusu �zeinde �al��an k�pr�ler olarak g�nmelidir. Takip edilecek en iyi k�pr� mytable k�pr�s�d�r.

 

 

�ki Komut

�AE, PostgreSQL istemci k�t�phanesiyle (libpq) yaz�lm�� kullan�c� aray�z� ya da y�netim programlar�n�, sizin uygulamalar�n�za ya da artalan programlar�n�za ba�layan bir k�t�phanedir. �AE, bir aray�zd�r, veritaban� de�il. Sadece, SELECT ve UPDATE SQL komutlar�na gereksinimi vard�r.

SELECT ifadesi i�in gerekli yaz�m �ekli:

  SELECT column_list FROM table [where_clause] [limit_clause]

column_list, virg�lle ayr�lm�� s�tun isimleri listesidir. where_clause, AND ile ayr�lm�� kar��la�t�rma listesidir. Kar��la�t�rma i�aretleri =, |=, >=, <=, >, ve <. limit_clause, [LIMIT i] [OFFSET j] �eklindedir. i, geri d�nd�relecek maksimum sat�r say�s�d�r ve j kadar sat�r� g�stermeden atlar�z. Yaz�m� anlamak i�in birka� �renek verelim:

  SELECT * FROM rta_tables

  SELECT notes, count FROM atable WHERE count > 0

  SELECT count FROM atable WHERE count > 0 AND notes = "Hi Mom!"

  SELECT count FROM atable LIMIT 1 OFFSET 3

LIMIT'i 1 yapma ve belirli bir sat�r� alabilmek i�in OFFSET belirleme. En son �rnek C'deki (mytable[3].count) ifadeye benzer.

UPDATE ifadesinin yaz�m�:

UPDATE table SET update_list [where_clause] [limit_clause]

where_clause ve limi_clause, yukar�da anlat�ld�. update_list, s�tun atamalar�n�n virg�lle ayr�lm�� listesidir. Tekrar, �rnekler yard�mc� olacakt�r:

  UPDATE atable SET notes = "Not in use" WHERE count = 0

  UPDATE rta_dbg SET trace = 1

  UPDATE ethers SET mask = "255.255.255.0",
                    addr = "192.168.1.10"
                WHERE name = "eth0"

�AE, �rneklerde hep b�y�k harf kullan�lmas�na ra�men, k���k/b�y�k harf ayr�m� yapmaz.

 

 

�ndirme ve Kurma

�AE'yi kendi anasayfas� www.runtimeaccess.com (LGPL lisansl�d�r)'dan indirebilirsiniz. �AE'nin hangi s�r�m�n� indirece�inize dikkat edin. �AE'nin son s�r�m�, PostgreSQL'in 7.4 s�r�m� ile �al���r. �o�u Linux da��t�m� 7.3 s�r�m� ile birlikte gelir. Ba�lang�� i�in �AE'nin eski s�r�mlerini kullanabilece�iniz gibi iyile�tirilmi� ve hatalardan ar�nd�r�lm�� s�r�m� i�in en son s�r�m�n� kullanmal�s�n�z.

Paketi a�t���n�zda a�a��daki dizinlerin olu�mas� gerekir:

 ./doc            # �AE ana sayfas�n�n bir kopyas�
  ./empd           # �AE ile olu�turulmu� bir prototip artalan s�reci
  ./src            # �AE k�t�phanesinin kaynak dosyalar�
  ./table_editor   # Tablo d�zenleyicinin PHP kayna��
  ./test           # �rnek bir uygulaman�n kayna��
  ./util           # �AE'yi yazarken kullan�lan yard�mc� programlar

Graham Phillips'e te�kk�rler, �AE'nin 1.0 s�r�m� autoconf deste�ine sahiptir. Graham, �AE'yi Linux'tan Mac OS X'e, W,ndows'a ve FreeBSD'ye uyarlam��t�r. 1.0 s�r�m�n� kullanarak, �AE'yi s�radan komutlarla y�kleyebilirisiniz.

  ./configure
  make
  make install      # ( root olarak)

Y�kleme, librtadb.so ve ilgili dosyalar� /usr/local/lib sizinine koyar. �AE'yi kullanabilmek i�in bu dizini /etc/ld.so dosyas�na yazmal� ve ldconfig komutunu �al��t�rmal�s�n�z ya da dizini y�kleme yoluna �u �ekilde eklemelisiniz:

  export LD_LIBRARY_PATH=/usr/local/lib

Y�kleme, �AE ba�l�k dosyas�n�, rta.h, /usr/local/include dizinine koyar.

make, bir test program�n� test dizininde olu�turur ve y�klemenizi test etmek i�in test dizinine gidin ve ./app & komutunu �al��t�r�n. netstat -nat komutu size 8888 nolu portu dinleyen bir program oldu�unu s�yleyecektir. Art�k psql komutunu �al��t�rabilir ve SQL komutlar�n� test program� ile kullanabilirsiniz.

  cd test
  ./app &

  psql -h localhost -p 8888
  Welcome to psql 7.4.1, the PostgreSQL interactive terminal.

  Type:  \copyright for distribution terms
         \h for help with SQL commands
         \? for help on internal slash commands
         \g or terminate with semicolon to execute query
         \q to quit

  # select name from rta_tables;
      name
  -------------
   rta_tables
   rta_columns
   rta_dbg
   rta_stat
   mytable
   UIConns
  (6 rows)

Bir veritaban�na ba�l�ym��s�n�z gibi g�r�nmenize ra�men asl�nda ba�l� de�ilsiniz. Unutmay�n: Kullanabilece�iniz iki komut SELECT ve UPDATE'dir.

 

 

�AE'nin Avantajlar�

Kullan�c� aray�z� programlar�n� artalan s�recinden ay�rman�n avantaj�, geni� dizayn, kodlama, hata ay�klama ve yap�labilik kategorlerine girer.

Dizayn a��s�ndan bakarsak, bu ayr�m, aray�z�n nas�l g�sterilece�ini dert etmeden, dizayna en ba��nda karar vermeye zorlar. Tablolar�n dizayn�n� d���nme a�amas�, uygulaman�z�n ger�ek dizayn�n� d���nmeye zorlar. Tablolar, uygulaman�z�n i� i�levsel �zelliklerini �ekillendirir.

Kullan�c� aray�z� ve artalan s�re�lerinin ayr�m�, kullan�c� aray�z� uzmanlar�n� ve artalan uzmanlar�n� ayr� ayr� i�e alabilirsiniz ve bu ki�iler kodlar�n� ba��ms�z olarak yazarlar ve daha sonra bu kodlar pazarlama i�in hemen birle�tirilebilirler, demektir. PHP, Tcl/Tk, Perl ve C i�in Postgres ba�lant�lar� oldu�undan, i�iniz i�in uygun olan�n� se�ersiniz.

Hata ay�klama daha kolay ve daha h�zl� olur ��nk� her iki taraf da di�erini kolayl�kla sim�le edebilir. �rne�in, aray�z m�hendisleri, porgramlar�n�, ayn� tablo izinlerine sahip ger�ek bir Postregs veritaban�yla �al��t�rabilirler. Artalan s�recini test etmek daha kolay ve daha eksizdir ��nk� bir aray�z�n yapt�klar�n� yapan betik yazmak kolayd�r. Ve bir test �al���rken, i� durumu ve istatistikleri kontrol etmek kolayd�r. Bir i� durumu ya da �art� zorlayabilmek, u� durumlar� test etmeye yard�mc� olur. Laboratuar ortam�nda b�yle durumlar� test etmek genelde zordur.

�r�n�n�z�n yeteneklerini, �AE ile geni�letebilirsiniz. M��teriniz , program �al���rken, ayr�nt�l� durum raporunu ve istatikleri g�rebilmeyi ger�ekten taktir edecektir. Kullan�c� aray�z� ile artalan program�n� ay�rmak, birden fazla aray�z�n�n olabilir, demektir: SNMP, comut sat�r�, web, LDAP vs. Bu esneklik, e�er m��teriniz iste�e ba�l� aray�zler isterse �ok �nemli olacakt�r.

�AE, bu tip bir paket i�inde olamas�n� isteyebilece�iniz bir �ok �zellik sunar:

 

 

�zet

Bu makalede �AE k�t�phanelerine ve yeteneklerine k�sa bir giri� yap�ld�. �AE anasayfas�, SSS ve API'nin tam bir tan�t�m�n� ve bir�ok �rnek istemci program�n� i�erir.

�AE sizin veri yap�lar�n�z� bir veritaban�nda tablolar olarak olarak g�sterebildi�i gibi, sanal dosya sistemindeki dosyalar olarak da g�sterebilir ( Miklos Szeredi'nin yazd��� Kullan�c� alan�nda Dosya Sistemi (FUSE) paketi). �AE anasayfas�, dosya sisteminin nas�l kullan�laca�� hakk�nda fazlas�yla bilgi i�ermektedir.

 

Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz

Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
 talkback page 

<--, Bu say�n�n ana sayfas�na gider

G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Bob Smith , FDL
LinuxFocus.org
�eviri bilgisi:
en --> -- : Bob Smith <bob/at/linuxtoys.org>
en --> tr: �zcan G�ng�r <ozcangungor(at)netscape.net>

2004-06-26, generated by lfparser version 2.46