C/C++

http post + xml dom

Fórumok

Udv!

Egy python-os x-plane plugint kezdtem el atirni. Ahol elakadtam: http post kudese, amire a szerver egy xml-el valszol. Ezt kellene nekem valami DOM-kent feldolgozni.Python-ban igy nez ki a dolog:


def XFSEpost(self, query):
    stuff = urlopen('http://www.valahol.hu/get.php?'+query).read()
    stuff = stuff.replace('&',' and ')
    dom = minidom.parseString(stuff)
    return dom

Aztan ezt kesobb felhasznalva:


startFlight=self.XFSEpost("user="+self.userstr)
print startFlight.getElementsByTagName('leaseExpires')[0].firstChild.data

Ezt szeretnem en megoldani cpp alatt is. Mivel meg soha nem szagoltam cpp-hoz, igy elkezdtem keresgelni es ezeket talaltam egyelore (a dolog szepsege, hogy ennek win/linux/mac alatt is mukodnie kene :) Tehat olyan cuccokat kerestem amik cross-platform):

- http post
- xml dom (xerces)
- xml dom (xsd)

A legjobb az lenne, ha megirnam ezeket is magam, igy nem kell kulso cuccot hasznalni es tuti menne mindenhol, de sajnos ehhez nagyon keves vagyok :)

Egy kis hatter:
Jelenleg ez a python script egy cpp-ben megirt plugin-en fut az xplane-ben - jo, mert plaformfuggetlen, viszont bugos. Igy jutottam el oda, hogy megirom cpp-ban.
A pluginek tulkepp winen .dll-ek, linuxon .so-k, macen passz - ezt meg nem deritettem ki, de unix alapu rendszerbol kiindulva ott is .so lehet.

A kerdes: tudtok-e ajanlani valami hasznalhatot a fentieken kivul, illetve ezeket mennyire ajanljatok egy kezdonek?

Elore is koszonok minden segitseget.

[solved]Kis C program bitek számlálására, érdekes "hiba"...

Fórumok

Sziasztok!

Hát lehet én vagyok hülye, illetve azt hiszem belefutottam valami architektúrális(??) eltérésbe.Szóval, a program feladata ez lenne:

Te megadsz 3 számot 1 és 8 között, ami egy helyiértéket képvisel. (8 bit, kettes számrendszer)
Adott egy bemeneti fájl, majd ezen a fájlon kéne végigmenni bájtonként(be.doc), és 2x3 számlálót inkrementálni a a megadott helyiértékeken lévő értékek (0,1) szerint.
Szóval kvázi megszámolja, hogy adott helyiértéken hány helyen van 1-es vagy 0 a bemeneti fájl bájtjaiban.

Probléma:

Nállam jónak tűnik a futás az eredménye(win7 beta, devcpp 4.9.9.2), a család másik gépén(win xp, devcpp 4.9.9.2 és ubuntu 8.10, gyári gcc) is ugyan azt dobja, sőt 2 suliszerveren is(valamilyen linux...). Azért gondolom, hogy jó, mert az adott helyen lévő 0-ák és 1-esek számának összege = a fájl méretével.

Viszont 2 ismerősöm összesen 4 gépén más eredményt ad, ott az egyesek számát egyszerűen nullának véli.

Tehát, mint ahogy már írtam: akkor ez most hogy/miért?
(lehet, hogy a program (is) hibás? nem tudom)

Program forráskódja: http://pastebin.com/m7cbf0e6a

A válaszokat/megjegyzéseket előre is köszönöm!

[Megoldva] JNA: natív könyvtár futtatási hiba

Fórumok

Sziasztok!

(UBUNTU Linux 8.04, JDK1.6, gcc 4.2.4)

Szerettem volna megvalósítani egy megosztott könyvtár használatát Javaban a JNA segítségével. Odáig eljutottam nagy nehezen, hogy az *.so fájlt már betölti. Sajnos nem látja a benne lévő, általam használni kívánt, függvényt. Fontos tudni, hogy a lib-et is én hoztam létre. Csak azért mondom, mert lehet, hogy abban van a hiba.

Ez a Java pogram:


import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

public class DllLoader {

    public interface myLibrary extends Library {
        //static String myLib = this.libName();
        String dirLinux = "/home/pj/xmp_02/DllLoader/native/";
        String dirWin = "";
        myLibrary INSTANCE = (myLibrary)
            Native.loadLibrary((Platform.isWindows() ? dirWin+"xmp.dll" : dirLinux+"libxmp.so"),
                               myLibrary.class);
    
        void printXX();
    }
    
    public static void main(String[] args) {
        myLibrary.INSTANCE.printXX();
    }
}

Ezt a hibaüzenetet kapom:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'printXX': /home/pj/xmp_02/DllLoader/native/libxmp.so: undefined symbol: printXX

A megosztott könyvtár forráskódja pedig így néz ki:

xmp.h:


#ifndef PJ__MY_XMP_H
#define PJ__MY_XMP_H

class LibClass {

public:
  LibClass();
  virtual ~LibClass();
  void printSomething();
};

void printXX();
#endif

xmp.cpp:


#include "xmp.h"
#include < iostream >

LibClass::LibClass() {}

LibClass::~LibClass() {}

void LibClass::printSomething() {
     std::cout << "Ez a program, csak kiir valamit.\n"
               << "Nincs mas szerepe, mint szemleltetni, "
               << "hogyan lehet egy dll fajlt meghivni a Java-ban.\n";
}

//-----------------------------------------------------------------

void printXX() {
     LibClass lc;
     lc.printSomething();
}

Szóval a kérdésem: Hol a hiba? A megosztott könyvtárban vagy a Java-ban? És hogyan orvosolható.

[megoldva] usleep vs signal - pthreads

Fórumok

Sziasztok!

Írok egy programot, ami több dolgot is csinál egyszerre, összesen 5 szálon (pthread). Ezek közül az egyik egy soros porti kommunikációt végez, amiben "Serial Programming HOWTO" 3.1 fejezetében levő példa alapján írt kód olvas-ír a soros portra. Ez:


saio.sa_handler = xt_signal_handler_IO;
sigemptyset(&saio.sa_mask);
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO, &saio, NULL);
fcntl(xt_fd, F_SETOWN, getpid());
fcntl(xt_fd, F_SETFL, FASYNC);

Az a fura szituáció állt elő, hogy egy másik szál olyan műveletet végez közben, amiben fontos lenne, hogy pontosan (0.1 mp pontossággal) meg tudja adni, hogy mennyi ideig várakozzon. Na amikor megérkezik a soros porti szálhoz a signal, akkor az felébreszti a várakozó (pl. usleep(2200000);) szálat is. röviden az történik, hogy kommunikáció közben a várakozó szál hirtelen veszettül felgyorsul, így használhatatlanná válik a rendszer. Az világos számomra is, hogy a usleep() függvény addig alszik, amíg le nem telik az idő, amit megadtam neki, vagy nem érkezik egy signal, de nekem az nem világos, hogy a signal-ok kezelése miért van hatással más szálakra is!

Ha valakinek van ilyen irányú tapasztalata, akkor kérem segítsen nekem megoldani a problémát! Nyilván az én kódomban van valami hiba, de nem ástam magam mélyen bele a signal kezelés rejtelmeibe, csak amennyire muszáj volt.

Előre is köszönök minden építő jellegű hozzászólást!

Üdv:
denx

recv - soronként tömb elemek

Fórumok

Üdv!

Írtam egy HTTP klienst, működik remekül, ahogy kell. A problémám az lenne, hogy most úgy olvasom a socketet, hogy 1024 byteonként recv és egyből adom is tovább az stdoutra. Valami olyasmit szeretnék, hogy minden egyes sora a HTML dokumentumnak, egy tömb eleme legyen(Mint PHP-ben a file fgv.) Arra gondoltam, hogy fogok egy ciklust, és elkezdem karakterenként végignézni, h hol van benne \n vagy keresek/írok vmi függvényt, ami visszaadja egy megadott karakter előfordulási helyeit egy szövegben és az alapján kivagdosom a részeket... Nincs ettől vmi egyszerűbb megoldás? Netán vmi strpos függvény?:) köszi előre is a tippeket;]

[megoldva] PSQL plugin - Qt 4.5.0 LGPL 2.1/GPL 3 --- MinGW

Fórumok

Sziasztok,

Régóta probálgatom a Qt-t és keresztplatformos fejlesztést csinálok. Eddig (=gépcsere) nem is volt gondom a PSQL adatbázis plugin kézi fordításával:


c:
cd "C:\Qt\4.x.x\src\plugins\sqldrivers\psql"
qmake "INCLUDEPATH+=C:\PROGRA~1\POSTGR~1\8.2\include" 
      "LIBS+=C:\PROGRA~1\POSTGR~1\8.2\lib\ms\libpq.lib" psql.pro
make

VAGY


c:
cd "C:\Qt\4.x.x\src\plugins\sqldrivers\psql"
qmake "INCLUDEPATH+=C:\PROGRA~1\POSTGR~1\8.2\include" 
      "LIBS+=C:\PROGRA~1\POSTGR~1\8.2\lib\libpq.a" psql.pro
make

Általában működött valamelyik. Próbáltam mindkettővel...

Az új 4.5-ös verzió viszont sehogy nem akarja használni az elkészített, lefordított új qsqlpsql4.dll, qsqlpsql4d.dll és vagy libqsqlpsql4.a, libqsqlpsql4d.a fájlokat.

Végső elkeseredésemben újrafordítottam az egész Qt 4.5-öt.


C:
cd C:\Qt\4.5.0
configure.exe -plugin-sql-psql 
              -plugin-sql-odbc 
              -plugin-sql-sqlite 
              -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg 
              -qt-style-windowsxp -qt-style-windowsvista 
              -platform win32-g++ 
              -L C:\Progra~1\PostgreSQL\8.2\lib 
              -I C:\Progra~1\PostgreSQL\8.2\include
make

Minden hibátlanul lefordult: csak a VC++ 2008 környezeti változóit kellett (INCLUDE, LIB stb..) kiiktatni. De ez sem segített.

Amikor kapcsolódok az adatbázishoz "Driver not loaded Driver not loaded" üzenetet kapok.

Tud ebben valaki segíteni?

Köszönöm.

string-int típuskonverzió probléma

Fórumok

Üdv!

Úgy tűnik, ez nem az én napom... :(

A lentebbire már rájöttem, miért vagyok hülye, viszont valami még mindig problémás. A típusok már elméletileg stimmelnek, le is fordul, viszont a következő helyen probléma van:

void ReadFromKeyboard(vector<string> &t)
{
string name;
cin >> name;
while(name!="::quit") { t.push_back(name); cin >> name; }
cout << atoi(t[1].c_str());
}

A t vektor így fest: vector<string> t;

A ciklus szépen végigszalad, az utána következő kövér sor viszont szegmens hibát dob. Valaki legyen szíves, magyarázza el nekem, hogy miért?

ez a hülyeség már megoldva:

Biztosan az agyamra ment valami, és meghülyültem, de ezt nagyon nem értem... Adott egy C++ program, abban a következő függvény ( t a mainben létrehozva: vector t; ):

bool valami(const vector t);

bool valami(const vector t)
{
bool l = false;
bool feltetel = false;
int i = 0;
do { if ( atoi(t[i]) == 0 ) { feltetel = true; } ... } while( (atoi(t[i]) >= 0) && (i < (int)t.size()) );
return l;
}

a fordító a kövérített részre panaszkodja, hogy:
error: cannot convert ‘const std::basic_string, std::allocator >’ to ‘const char*’ for argument ‘1’ to ‘int atoi(const char*)’

miért is? és hogy kéne javítani? köszi a segítséget!

Dynamic symbol table olvasása.

Fórumok

Pár perce olvasgattam egy Gtk tutoriált, és megakadt a szemem ezen:

gtk_builder_connect_signals (builder, NULL);

Ez ugye automatikusan beállítja a callback fv-eket (aka. signal connect).
A kérdés csak az, hogy hogyan?

Dynamic lib-nél még olvasható lenne a szimbólumtábla, de itt csak egy futtatható állomány van. Mégis hogy működik ez?

glade2 --> glade3 átállás.

Fórumok

Üdv néktek.

Eddig Glade2-vel programoztam, ott simán elő lehetett készíteni a callbacks.c, és h állományokat. Ebben az "új" glade-ben nem találom, ezeket. Nincs is ilyen, hogy létrehozza az állományokat? Hogyan tudom a glade3-at használni? Van valami jó kis tutorial a használatához? Nekem a glade bőven elég, met csak matekmodulokhoz írok megjelenítőt, nem a gui a főmunka többnyire 1-2 gomb és max néhány kép amit használok.

Folytatás:
Ok egész jól megtanultam a Glade3 használatát tényleg nem vészes. Viszont az lenne a kérdésem, hogy nincs módszer arra, hagy a lefordított állományokba valahogy ""belforgatni"" az xml-fileket, mert így csak 1 állományból állna a programom, és nem kellene a külön xml-eket vinnem egyik gépről a másikra..... Nem mintha ez egy hatalmas probléma lenne, de az van hogy a program nem itt fog futni, és nincs kedvem megtanítani telepíteni a futtató emberkét, hogy mit hova másolgasson stb...

Előre is köszönöm a segítséget.

C++/QT4 és SNMP ill. SSH

Fórumok

Sziasztok!

Pár éve fejlesztek egy programot, saját célra, hálózatfelügyelethez. A program eddig Perl/PHP/MySQL-ben készült. Jelenleg igencsak rászorul egy újragondolásra/újraírásra (esetleg olyan formában, ami alkamas arra, hogy közkincsé tegyem).
Mivel elég jól elvagyok a QT4-el, arra gondoltam, hogy az új verzió ebben készülne. Sajnos néhány dologgra nem igazán találok jó megoldást:
Az információgyűjtésre az SNMP-t használom, amit eddig a NET-SNMP-tools parancsfáljain keresztül oldottam meg, a programkimenet szövegének feldolgozásával. Ez ugye nem a leghatékonyabb megoldás. A QT-hez nincs SNMP modul, amit eddig néztem: net-snmp C API : nem nevezném sem egyszerűnek, sem túldokumentáltnak. SNMP++ szintén nem egyszerű, de legalább rosszul dokumentált (nyomtatott könyv van róla, kb 10 éves, de ennek a beszerzése elég macerás, letölteni nem tudtam). snmpkit könyvtár: ha jól értem csak az SNMP v1-et támogatja, ami nem elég. Felmerült annak a lehetősége, hogy beágyazott PERL-en keresztűl csinálom az SNMP kéréseket, de nem tudom megéri-e, félek, hogy a perl modulok dokumentáltsága sem sokkal jobb. Nekem úgy tűnik, hogy az SNMP tudorok szerint elég, ha elolvasom az RFC-ket és megnézem a forrását a könyvtáraknak, és abból minden kiderül. Ez igaz, de erre sem időm, sem kedvem (és bizonnyal az angol tudásom sem elég), és nem tudora akarok lenni a témának, csak lehetőleg hatékonyan szeretnék egy programban nagyszámú SNMP lekérdezést csinálni. Szivesen fogadnék tippeket, a legkevésbé kűzdelmes megoldás kiválasztásában.
A régi rendszer egyes lekérdezéseket SSH-n keresztül csinálta, van valamilyen egyszerű módszer az SSH kapcsolatok kezelésére C/C++-ban, vagy itt nics más megoldás mint az ssh parancsot hívogatni, ill. a módszert elfelejteni.
Esetleg arra is várok tippeket, hogy milyen kész programokat tudék beolvasztani a sajátomba:
Eddigi öletek: A nagios integrálása. Ezt csak tegnam kezdtem körbejárni. Jó lenne egy olyan doksi, ami gyengébb angol udással is felfogható, és nem csak a nagyon alapokról szól.
A forgalom grafikonok rajzolsához rrdtools-t haszáltam, ezt a részt lehetne egyszerűsíteni a munin, vagy a cacti esetleg más bevonásával. A munin-t kipróbáltam, és a legegyerübb felállásban nem igazán akar működni.
A régi program folyamatosan feltérképezte a switch-ek kapcsolódását, a kliens gépek helyét-mozgását, a VLAN kiosztást, a kliensek ip címeit, ill. annak változását. A switch portok állapotát, és erre épülve figyelmeztetést adott, ha egy (figyelt) eszközt eltávolítottak a rendszerből. Nem tudom, hasonló feladatokra vannak-e kész programok. Ha igen, esetleg használhatnám/bevonhatnám azokat is, ill. adhatnának ötleteket.

Előre is köszönöm a tippeket.