Ich habe heute einen Dialog in mein Programm eingebaut, welcher für
einen Ping die Startaddresse sowie die Endaddresse (Bsp.: 192.168.0.1 ->
192.168.0.12) in LineEdit Boxen abfragt. Nun ist mein Problem wie ich die
Daten jetzt in den QThreat bekomme von wo aus der Ping gestarted wird.
Ich wollte es eigendlich über eine globale Struktur erledigen, da ich die
Daten eh in meiem QThread brauche, der permanent im Hintergrund
läuft. Die Struktur enthält auch die Flags die zur Steuerung des Ablaufes
zuständig sind.
Allerdings erhalte ich jetzt jedesmal einen undeclared Fehler wenn ich
versuche auf den, struct in dem Dialogslot zuzugreifen.
Code:
#include " "
onshm shm;
int main()
{
...
}
Globale Variablen -> undeclared
Globale Variablen -> undeclared
Zuletzt geändert von Djego27 am 3. Mai 2006 23:32, insgesamt 1-mal geändert.
Re: Globale Variablen -> undeclared
won deinen vorherige post habe ich gesehen das du auf linux arbeitest... richtig?...Djego27 hat geschrieben:Ich habe heute einen Dialog in mein Programm eingebaut, welcher für
einen Ping die Startaddresse sowie die Endaddresse (Bsp.: 192.168.0.1 ->
192.168.0.12)....
}
Herr Ping ... der erfinder von ping .... Michael John Muuss ist im dezember 2000 gestorben im jungen alter von 38 jahren ruhe er in frieden...
In der heutige zeit mit firewall ... iptable ecc... gibt es doch auf linux bessere und vorallem sichere methoden um zu sehen ob ein ip up ist... host , dig , kernel trace ... ecc...
Oder was genau willst du erreichen? startest befor ein Qprocess ?? oder
QTcpSocket socket; direkt ? ...
Ja ich arbeite mit Suse 9.3 8)
Zum Ping:
Mit dem Ping wird überprüft ob Rechner im Netzwerk vorhanden sind.
Dabei gibt man einfach eine Spanne von bis ein, welche Addressen der
Reihe nach angepingt werden. Bei Erfolg sollen die Ips dann in einer
ListBox ausgegeben werden.
Da ich mein Porgramm schon auf Console implementiert habe und jetzt
mit qt nur noch eine Oberfläche draufsetzen will werde ich den alten Code
als Qthreat verpackt und will ihn nebenher in einer Endlosschleife laufen
lassen. Da das Ping Programm ein extra Prozess ist habe ich ein
Shared Memory Segement bentutzt um mit ihm zu komunizieren. Das
Segment enthielt dabei halt einen Struct mit Daten (char arrays) und
Flags(ints) über welches alles gesteuert wurde. Ich würde es sehr
bergüßen wenn ich diese Methode weiterhin benutzen könnte daber da
der globale Struct als undefinid behandelt wird habe ich ein Problem.
Zum Ping:
Mit dem Ping wird überprüft ob Rechner im Netzwerk vorhanden sind.
Dabei gibt man einfach eine Spanne von bis ein, welche Addressen der
Reihe nach angepingt werden. Bei Erfolg sollen die Ips dann in einer
ListBox ausgegeben werden.
Da ich mein Porgramm schon auf Console implementiert habe und jetzt
mit qt nur noch eine Oberfläche draufsetzen will werde ich den alten Code
als Qthreat verpackt und will ihn nebenher in einer Endlosschleife laufen
lassen. Da das Ping Programm ein extra Prozess ist habe ich ein
Shared Memory Segement bentutzt um mit ihm zu komunizieren. Das
Segment enthielt dabei halt einen Struct mit Daten (char arrays) und
Flags(ints) über welches alles gesteuert wurde. Ich würde es sehr
bergüßen wenn ich diese Methode weiterhin benutzen könnte daber da
der globale Struct als undefinid behandelt wird habe ich ein Problem.
und wie packst du die daten in das Struct ? dies bedeuted jedes struct ist das resultat von einem ping result? wenn ich das so richtig verstanden habe ... oder ist jedes struct viele (char arrays)? poste mal die struct deklaration ... und was dazu gehoert...Djego27 hat geschrieben:Da das Ping Programm ein extra Prozess ist habe ich ein
Shared Memory Segement bentutzt um mit ihm zu komunizieren. Das
Segment enthielt dabei halt einen Struct mit Daten (char arrays) und
Flags(ints) über welches alles gesteuert wurde. .
In meinem server park habe ich heute 16 server ... am gateway habe ich ein kleinen arp server gebaut der die mac adresse die ip den namen und die offene port darstellt .. und das ganze als xml bereit haltet alle 20 minuten... so kann ich sehen ob was nicht online ist als sms... da die 1/2 der server ping sperren haben im kernel...
@Patrik08
Nein das ist glaube ich falsch rübergekommen.
Meine Idee zum Programm war für Linux eine einfache Möglichkeit
zu schaffen auf die mountbaren Verzeichnisse anderer Recher am
Netz zuzugreifen und diese einzuhängen, ohne das man das Netz kennt.
Alle diese Anwendungen sind reine Konsolenanwendungen, ich will
halt jetzt onMain eine Grafische Oberfläche mittels Qt verpassen,
das ist schon alles.
onMain -> Hauptprogamm zur Speicherung und Steuerung
onPing -> Programm welches "system(ping) dazu verwendet andere
Rechner zu finden und die gefunden Ips an onMain
weiterleited
onServer -> Server der einer onClient Anwendung die mountbaren
Verzeichnisse auf dem Rechner mitteilt
onClient -> Prüft ob auf dem Recher ein onServer läuft und fordert
die Liste der freigegeben Verzeichnisse an
Alle Anwendung sollen über ein shell script gestarted werden, onMain
erzeugt ein SHM Segent und greift über einen Pointer von onShm
darauf zu. Alle ander Anwendung binden sich ebenfalls an das Segement
an und legen ebenfalls eine Pointer von onShm auf die gleiche Stelle
im Segemnet, welches dann in allen Anwendungen global ist.
Folglich greifen alle Programme über einen Pointer auf den gleichen
Speicher zu. Dies hat den Vorteil das man in den Programmen den
onShm Struct wie eine ganz normalen Struct benutzen kann.
Zum Ping, onMain schreibt die Startaddresse als string sowie die
Anfangs- und Endaddresse als int in den Struct. Dannach wird
ping_order auf GET_DATA (ein einheitlicher Define für alle Progamme)
gesetzt. Nun übernimmt onPing die Daten und beginnt mit der Arbeit.
Wenn ein Ping erfolgreich war überschreibt onPing die ping_ip mit der
gefunden ip und setzt ping_status auf DATA_AWAIDABLE(define).
Beim nächseten überprüfen von ping_status im Main Loop von onMain
wird wird erkannt das neue Daten vorhanden sind. Jetzt wird ping_ip
von onMain in einer Liste gespeichert und ping_status auf
DATA_RECIVED gestellt. OnPing welches die Zwischenzeit mit usleep
totgeschlagen hat, prüft ping_status und setzt im Falle DATA_RECIVED
ping_status wieder auf WORKING und macht mit der nächsten ip
weiter. Ist alles fertig setzt onPing seinen Status auf READY um zu
zeigen das es bereit für eine neue Aufgabe ist.
BTW: Mein Problem ist eigendlich nur das der globale definierte Struct
als undefined gilt, also einfach nicht vom Compiler erkannt wird.
In der Consolenanwendung hatte ich damit nie Probleme, aber
in Qt will es einfach nicht gehen.
Nein das ist glaube ich falsch rübergekommen.
Meine Idee zum Programm war für Linux eine einfache Möglichkeit
zu schaffen auf die mountbaren Verzeichnisse anderer Recher am
Netz zuzugreifen und diese einzuhängen, ohne das man das Netz kennt.
Alle diese Anwendungen sind reine Konsolenanwendungen, ich will
halt jetzt onMain eine Grafische Oberfläche mittels Qt verpassen,
das ist schon alles.
onMain -> Hauptprogamm zur Speicherung und Steuerung
onPing -> Programm welches "system(ping) dazu verwendet andere
Rechner zu finden und die gefunden Ips an onMain
weiterleited
onServer -> Server der einer onClient Anwendung die mountbaren
Verzeichnisse auf dem Rechner mitteilt
onClient -> Prüft ob auf dem Recher ein onServer läuft und fordert
die Liste der freigegeben Verzeichnisse an
Alle Anwendung sollen über ein shell script gestarted werden, onMain
erzeugt ein SHM Segent und greift über einen Pointer von onShm
darauf zu. Alle ander Anwendung binden sich ebenfalls an das Segement
an und legen ebenfalls eine Pointer von onShm auf die gleiche Stelle
im Segemnet, welches dann in allen Anwendungen global ist.
Folglich greifen alle Programme über einen Pointer auf den gleichen
Speicher zu. Dies hat den Vorteil das man in den Programmen den
onShm Struct wie eine ganz normalen Struct benutzen kann.
Zum Ping, onMain schreibt die Startaddresse als string sowie die
Anfangs- und Endaddresse als int in den Struct. Dannach wird
ping_order auf GET_DATA (ein einheitlicher Define für alle Progamme)
gesetzt. Nun übernimmt onPing die Daten und beginnt mit der Arbeit.
Wenn ein Ping erfolgreich war überschreibt onPing die ping_ip mit der
gefunden ip und setzt ping_status auf DATA_AWAIDABLE(define).
Beim nächseten überprüfen von ping_status im Main Loop von onMain
wird wird erkannt das neue Daten vorhanden sind. Jetzt wird ping_ip
von onMain in einer Liste gespeichert und ping_status auf
DATA_RECIVED gestellt. OnPing welches die Zwischenzeit mit usleep
totgeschlagen hat, prüft ping_status und setzt im Falle DATA_RECIVED
ping_status wieder auf WORKING und macht mit der nächsten ip
weiter. Ist alles fertig setzt onPing seinen Status auf READY um zu
zeigen das es bereit für eine neue Aufgabe ist.
Code: Alles auswählen
typedefine struct on_shm_type
{
int ping_start; //int Wert für die letzte ip Stelle vom ersten Ping
int ping_max; //endwert für die letze ip Stelle als int
char ping_ip[16]; //string der ersten ip _> zB.:192.168.0.5
int ping_order; // signale vom Hauptprogamm an das Ping Programm
int ping_status; // steuert main switch im Ping Programm / Zustand
int client_status;
int client_order;
char client_ip[16]; // ip zu welcher sich Client verbinden soll
char client_data[1024]; // Puffer für empfangene Daten
int server_order;
int server_status;
char server_ip[16]; // ip des Clients der mit Server verbunden ist
char server_data[1024]; // Puffer für zu sendende Daten
} onshm;
als undefined gilt, also einfach nicht vom Compiler erkannt wird.
In der Consolenanwendung hatte ich damit nie Probleme, aber
in Qt will es einfach nicht gehen.
Zuletzt geändert von Djego27 am 4. Mai 2006 11:12, insgesamt 1-mal geändert.
gerade darum ... wollte ich den struct sehen .... da ich das selbe problem hatte mit der sqlite3 original libs nicht die qtsql..Djego27 hat geschrieben: BTW: Mein Problem ist eigendlich nur das der globale definierte Struct
als undefined gilt, also einfach nicht vom Compiler erkannt wird.
In der Consolenanwendung hatte ich damit nie Probleme, aber
in Qt will es einfach nicht gehen.
mein struct wahr auch undefined .. der compiler wollte einfach nicht durch! mit dev-cpp ( http://www.bloodshed.net/devcpp.html oder linux compiler keine problemen )wahr er problemlos su complilieren jedoch im qt3 / qt4 nicht!
obwhol er richtig ist... und mit andere compiler durchgeht!
Code: Alles auswählen
struct sqljumper {
sqlite3 *db; /* The database */
int cnt; /* Number of records displayed so far */
int mode; /* An output mode setting */
int showHeader; /* True to show column names in List or Column mode */
QString zDestTable; /* Name of destination table when MODE_Insert */
QString CleanTableName; /* Name of destination table when export dump */
QString separator; /* Separator character for MODE_List */
int colWidth[100]; /* Requested width of each column when in column mode*/
int actualWidth; /* Actual width of each column */
QString nullvalue; /* The text to print when a NULL comes back from*/
QString zDbFilename; /* name of the database file */
QString zrowsFilename; /* name of file rows streams callbacks */
};
dann habe ich einfach das struct und die dazuhoerende callback kommentiert als C so ... und qt hat sie akteptiert .. compiliert und funktioniert...
Code: Alles auswählen
#ifdef __cplusplus
extern "C" {
#endif
code struct callback ........
#ifdef __cplusplus
} /* End of the 'extern "C"' block */
[gelößt] Globale Variable -> Undeclared
Es tut mir leid dass ich mich so lange nicht gemeldet habe.
Ich hatte am Wochenende noch was anderes zu tun.
Ich habe das Problem jetzt gelößt, dabei sitzt der Fehler wie so oft
vor dem Computer und nicht drinn.
Ich habe bei der Includierung einen Rechtschreibfehler gemacht.
Dummerweise gab es diese besagte Header allerdings, es war eine
ältere Version der File die ich eigendlich einbinden wollte und hatte
keinen extern Verweis.
Dadurch ist der Fehler entstaden.
Ich hatte am Wochenende noch was anderes zu tun.
Ich habe das Problem jetzt gelößt, dabei sitzt der Fehler wie so oft
vor dem Computer und nicht drinn.
Ich habe bei der Includierung einen Rechtschreibfehler gemacht.
Dummerweise gab es diese besagte Header allerdings, es war eine
ältere Version der File die ich eigendlich einbinden wollte und hatte
keinen extern Verweis.
Dadurch ist der Fehler entstaden.