Qt ile Bir Ağ Uygulaması



Benzer belgeler
QT Eğitimi - 4 : İkili Saat (Binary Clock)

QT Eğitimi - 2 :Yerleşim (Layout)

Turquaz. Açık kodlu muhasebe yazılımı Turquaz Proje Grubu

REALTIME LINUX. 3. Linux ve Özgür Yazılım Şenliği Murat Demirten, 16 Mayıs 2004, Ankara

Compiere Açık kodlu ERP + CRM yazılımı. Hüseyin Ergün Önsel Armağan Serkan Demir

Düzenli İfadeler & Kullanım Alanları

Düzenli İfadeler & Kullanım Alanları

Paketi Açalım Indirmiş olduğunuz paketi tar komutu ile açın: tar xzf nagios version.tar.gz Kullanıcı Gruplarını Oluşturalım Paketi derledikten sonra n

Qt Temelleri. Eren BAŞTÜRK.

Linux Terminal Sunucusu. Afşin Taşkıran

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

DBMAIL KURULUMU BELGESI (Howto Install Dbmail) Yazan: Ozgur Karatas

Adı Soyadı Öğrenci No. Toplam (100p) 2 (10p) +10p. 5 (25p) +10p. 3 (20p) 4 (25p) 1 (20p)

Struct VE GÖSTERİCİLER FONKSİYONLARDA STRUCT KULLANIMI Programlama dilleri hafta -

Nesneye Dayalı Programlama Laboratuvarı

Bilindik engelleme yöntemlerinin dışında olan, kurumsal web filitreleri nasıl aşılır?

INTEGER OVERFLOW ***************************************************************/

Bilgisayar Sistemlerine Genel Bakış

BMB1002 Bilgisayar Programlamaya Giriş. Dosyalar. Prof. Dr. Necmettin Kaya

Adım Adım C-II. Eksik kalmış konular

Multicore/Multithread Programlama

Ruby On Rails. Hüseyin Gömleksizoğlu

M.Ali VARDAR 2006 Qt'ye Giriş QT 'YE GIRIŞ

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Açık Kaynak Kodlu Optik Sınav Kağıtları Depolama Sistemi

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

Qt Temelleri. Eren BAŞTÜRK.

Scream! e gelen veri akışlarından bazılarını diğer bir kurum yada bilgisayarla paylaşmak için kullanılabilir.

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

HSancak Nesne Tabanlı Programlama I Ders Notları

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

NESNEYE YÖNELİK PROGRAMLAMA

C Programlama printf() Fonksiyonu

void setup() fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız.

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

C Konsol ve Komut Satırı

Fonksiyonlar (Altprogram)

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Mantıksal Hacim Yönetimi (LVM)

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

Print Komutu ile Değişkenleri Yazdırmak

IDA Pro ile Remote Linux Debugging

Metin Dosyaları. Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

7.1- C#.net Giriş Çıkış İşlemleri ve Visual Studio. M.İLKUÇAR - 1

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Bolum 9. Konu Başlıkları

Bigisayar Programlama

DOSYA İŞLEMLERİ Programlama dilleri hafta -

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Sınav tarihi : Süre : 60 dak.

Genel Programlama II

Programlama Dillerinde Kullanılan Veri Tipleri

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

C PROGRAMLAMA D İ L İ

EnRoutePlus Format İşlemi Öncesi Yedek Alma Dokümanı Versiyon 5.8 Döküman Güncelleme Tarihi: 13/10/2010

E-FATURA LOGO ENTEGRATÖRLÜK UYGULAMASI

PROGRAMLAMAYA GİRİŞ DERS 2

Python Programlama Dili

Parçacık (Widget) Eren BAŞTÜRK

Temel Giriş/Çıkış Fonksiyonları

Android Ders Notları

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

NESNE TABANLI PROGRAMLAMA Final Sınavı Cevapları

C Dosyalama. Öğr. Gör. M. Ozan AKI. Rev 1.0

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

FreeBSD Üzerinde VLAN Kullanımı

KDE Masaüstü Ortamı. S.Çağlar Onur & Barış Metin. caglar@uludag.org.tr baris@uludag.org.tr. Akademik Bilişim 2005 Gaziantep

ECLIPSE IDE C/C++ Geliştiricileri Đçin

Sistem Konfigrasyonu ;

Lambda İfadeleri (Lambda Expressions)

OMNET Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü

C dilinde if-else yapısı

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

Telefon Rehberi Uygulaması

BÖLÜM 4 FONKSİYONLAR. Fonksiyonlar programların etkinliğini, kolay yazılmasını, anlaşılmasını ve bellekte daha az yer kaplamasını sağlayan bloklardır.

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Giris {\} /\ Suhap SAHIN Onur GÖK

LİNUX İŞLETİM SİSTEMİNİN KÖPRÜ MODUNDA ÇALIŞTIRILMASI VE GÜVENLİK DUVARI İŞLEMLERİ

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Arasınav Sınavı Soruları Güz 2017 Süre: 90 Dakika

Eln 1002 Bilgisayar Programlama II

Linux Assembly Programlamaya Giriş

FreeBSD Üzerinde VLAN Kullanımı

ALGORİTMA VE PROGRAMLAMA II

Finans Dünyasında Linux ve Özgür Yazılımlar

8. İŞARETCİLER (POINTERS)

YRD. DOÇ. DR. AGÂH TUĞRUL KORUCU

V-Ray Lisanslama Sistemi

Wolvox Kapı Ekranı. AKINSOFT Wolvox Kapı Ekranı Yardım Dosyası. Doküman Versiyon :

Qt ye Giriş. Can Kavaklıoğlu. 19 Temmuz Trolltech in Qt 4.0 alt yapısını kullanarak programlama yapmak için gerekli kütüphaneleri yüklemek

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

ÖĞRENME FAALİYETİ 1 ÖĞRENME FAALİYETİ 1 1. FORMLAR

Diziler (Arrays) Çok Boyutlu Diziler

Linux İşletim Sistemleri. Eren BAŞTÜRK.

Transkript:

Qt ile Bir Ağ Uygulaması Aykut Aksoy aykutaksoy@myway.com sürüm 1.0 Özet Bu belge Qt ile hazırlanmış bir ağ uygulamasını anlatır. C++ bilinmesi beklenir. Bu belgede "QProcess.h" kütüphanesine ağırlık verilmiştir. Bu proje "QProcess.h" kütüphanesini öğrenmek amacıyla yapılmıştır. Bu yüzden bir anlatı şeklindedir. Ön Çalışma Bu uygulamayı yazmadan önce bir ön çalışma yapmak ihtiyacı duydum. Sistemdeki,"ifconfig","ifconfig eth0","ifconfig lo","service network restart/stop/status" gibi komutların ne işe yaradığını bilmek gerekiyor. Ayrıca sistemin ağ ayarları ile ilgili dosyaların neler olduğu ve nerelerde tutulduğunu araştırdım. Başlangıç Yukarıdaki komutları araştırdıktan sonra, QTDesigner ile bir uygulama arayüzü oluşturmak gerekiyordu. Arayüzü kullanıcının bazı değerleri girebileceği ve ayarları değiştirebileceği şekilde tasarladım. Kullanıcı,sisteme ait ip adresi ve ağ maskesi gibi değerleri değiştirebiliyor. Ayrıca "eth0 Ayarları" ve "Network Ayarları" adli iki buton table ile ilgili ayarlara ait butonları bir araya getirdim. Aşağıda, oluşturduğum arayüze ait bir resim bulunmaktadır:

Projenin Gelişimi ve Kaynak Kodu Daha önce de bahsettiğim gibi uygulamanın neredeyse tamamını "QProcess.h" kütüphanesi kullanılarak yaptım.bu kütüphaneyi kullanmam gerektiğini anlamam biraz zaman aldı."qprocess.h" kütüphanesiyle,sistemde çalıştırılabilir olan uygulamaları başlatabiliyoruz.bu uygulamalar komut,dosya veya program olabiliyor.bu yüzden "QProcess.h" sınıfına ait fonksiyonların kullanımı çok önemli. Proje kapsamında kullanıcı ip adresi,ağ maskesi gibi değerleri değiştirebilecek ve eth0 ayarlarını ve network start/stop/status gibi ayarları kontrol edebilecekti."qprocess.h" kütüphanesini kullanarak, bu işleri gerçekleştiren sistem komutlarını Qt ile birlikte çalışabilecek hale getirebiliyoruz. Butonlarla form arasındaki gerekli SIGNAL/SLOT ilişkilerini ayarlayıp, SLOT' lara uygun fonksiyonları tanımlıyoruz."qprocess.h" 'dan bir pointer tanımladıktan sonra sınıfa ait "addargument" ve "setarguments" gibi fonksiyonları kullanarak, istediğimiz komut veya programı çalıştırabiliyoruz. Sınıfın "addargument(parametre)" fonksiyonunu kullanarak "ifconfig" komutunu çalıştırdım. Aşağıdaki kodda umarım demek istediklerim daha iyi anlaşılacaktır: void Form1::local() QString str=lineedit5->text(); p= new QProcess( this ); p->addargument("lo"); p->addargument( str );

Burada "p" sınıfa ait bir nesneyi işaret ediyor. Önce lineedit'in text()'ini "QString" snıfından "str" adlı bir stringe atıyoruz.bu işlemle lineedit'e girdiğimiz ifadeyi "addargument()" fonksiyonunun bir parametresi olarak alıyoruz."addargument()" fonksiyonunun parametreleri string türündendir.koddaki ilk parametre komutun kendisi, diğer parametreler, komuta ait parametrelerdir. Form1'e ait local() fonksiyonu, butona tıklatıldığında çalışacak olan SLOT'tur. Sonuçta yeni bir process start olur ve komut, butona tıklandığında çalışır hale gelir.bu komutla, arayüzdeki satıra girceğimiz adres localhost olarak ayarlanır. Buradaki sürecin(process) başlayıp başlamadığını kontrol etmek için aşağıdaki satırları koda ekledim: tr("localhost aktif"), tr("cikis") ); Görüldüğü gibi start() fonksiyonu sürecin başlayıp başlamadığını bildirir. Aynı yöntemi ip adresi ve ağ maskesi atamaları için de kullanıyoruz. Uygulamanın eth0 ayarları kısmında eth0'ın iki durumunu kontrol ediyorum. Bunlar eth0 UP ve eth0 DOWN.Bunları da ilgili buton ve connection'ları ayarladıktan sonra, "ifconfig eth0 up/down" komutunun QProcess yardımıyla gerçekleştirimiyle yapıyoruz: void Form1::ethup() p->addargument("eth0"); p->addargument("up"); tr("eth0 up"), tr("cikis") ); Görüldüğü gibi aynı işlemi yapan bir kod olduğu için yukarıdakiyle oldukça benzer bir yapıda.eth0 DOWN işlemini de aynı şekilde yapıyoruz.zaten tüm projeyi bu yöntemle gerçekleştirdiğim söylenebilir.bazı yerlerde dosyadan okuma kısımları dışında... Bu işlemlerden sonra gelelim network servis ayarlarına.. Bilindiği gibi sistemde bu iş "service network start/stop/status" komutlarıyla gerçekleştiriliyor.işte bu komutları QProcess.h ile gerçekleştiriyoruz. void Form1::network() p->addargument("start"); tr("network restart edildi"),

tr("cikis") ); Stop komutunu da aynı şekilde gerçekleştirdikten sonra status komutuna sıra geliyor.yalnız burada bir farklılık var. "service network status" komutunun çıktısı ekrana network'un o anki durumu hakkında bilgi verir.dolayısıyla bu komutun çıktısını bir dosyaya yazdırıp, QProcess ile o dosyadan okutmamız gerekiyor.aşağıdaki kodu incelersek: void Form1::durum() FILE *ptr;int boyut; p->addargument("status"); p->addargument(">/root/desktop/bilgi.txt"); ptr=fopen("/root/desktop/bilgi.txt","r"); fseek(ptr,0,seek_end); boyut=ftell(ptr); fseek(ptr,0,seek_set); char *buf=(char*)malloc(boyut); fread(buf,1,boyut,ptr); tr(buf), tr("cikis") ); Bu kodla "service network status" komutunun çıktısını "/root/desktop" altındaki "bilgi.txt" dosyasına yazdırıyoruz. Daha sonra bu dosyayı read modunda açıp, bellekten dosya boyutu kadar yer ayırıyoruz.bu dosyanın içeriğini de fread() ile okuyor ve butona tıklandığında bir information box ile ekrana çıkmasını sağlıyoruz.aslında başında çalıştırdığımız komut masaüstündeki dosyaya yazdırmayı da içeriyor("service network status>/root/desktop/bilgi.txt").bu sadece alternatif bir yol tabii ki, dileyen daha farklı yöntemlerle gerçekleştirebilir... Sonuç olarak bir toparlamak gerekirse "form1.ui.h" ve "main.cpp" dosyalarının içeriği aşağıdaki gibi olmalıdır: Form1.ui.h #include qprocess.h #include qstringlist.h #include stdlib.h #include qtextview.h #include qmessagebox.h #include stdio.h void Form1::init() void Form1::local() QString str=lineedit5->text(); p= new QProcess( this );

p->addargument("lo"); p->addargument( str ); tr("localhost aktif"), tr("cikis") ); void Form1::baslat() QString str=line1->text(); QString str2=line2->text(); p->addargument("eth0"); p->addargument(str); p->addargument("netmask"); p->addargument(str2); tr("baslatildi"), tr("cikis") ); void Form1::ethup() p->addargument("ifconfig") ; p->addargument("eth0"); p->addargument("up"); tr("eth0 up"), tr("cikis") ); void Form1::ethdown() Process *p= new QProcess; p->addargument("eth0"); p->addargument("down"); tr("eth0 down"), tr("cikis") ); void Form1::network()

p->addargument("start"); tr("network restart edildi"), tr("cikis") ); void Form1::stop() p->addargument("stop"); tr("servis durduruldu"), tr("cikis") ); void Form1::durum() FILE *ptr;int boyut; p->addargument("status"); p->addargument(">/root/desktop/bilgi.txt"); ptr=fopen("/root/desktop/bilgi.txt","r"); fseek(ptr,0,seek_end); boyut=ftell(ptr); fseek(ptr,0,seek_set); char *buf=(char*)malloc(boyut); fread(buf,1,boyut,ptr); tr(buf), tr("cikis") ); Main.cpp #include qapplication.h #include "form1.h" int main( int argc, char ** argv ) QApplication a( argc, argv ); Form1 w; w.show();

a.connect( &a, SIGNAL( lastwindowclosed() ), &a, SLOT( quit() ) ); return a.exec(); Son Söz Görüldüğü gibi program gayet basit.umarım QT Türkiye'ye bir katkım olmuştur.herkese teşekkürler. Telif Hakkı ve Lisans Bu belgenin, Qt ile Bir Ağ Uygulaması, 1.0 sürümünün telif hakkı 2006 Aykut AKSOY'a aittir. Bu belgeyi, Free Software Foundation tarafından yayınlanmış bulunan GNU Özgür Belgeleme Lisansının 1.1 ya da daha sonraki sürümünün koşullarına bağlı kalarak kopyalayabilir, dağıtabilir ve/veya değiştirebilirsiniz. Bu Lisansın bir kopyasını http://www.gnu.org/copyleft/fdl.html adresinde bulabilirsiniz. Linux, Linus Torvalds adına kayıtlı bir ticarî isimdir. Qt, TrollTech adına kayıtlı bir ticari isimdir. Feragatname Bu belgedeki bilgilerin kullanımından doğacak sorumluluklar, ve olası zararlardan belge yazarı sorumlu tutulamaz. Bu belgedeki bilgileri uygulama sorumluluğu uygulayana aittir. Tüm telif hakları aksi özellikle belirtilmediği sürece sahibine aittir. Belge içinde geçen herhangi bir terim bir ticarî isim ya da kuruma itibar kazandırma olarak algılanmamalıdır. Bir ürün ya da markanın kullanılmış olması ona onay verildiği anlamında görülmemelidir.