[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