raw sockets und pcap sind dazu nicht geeignet, da beide die standardbehandlung der pakete im kernel nicht verändern. die antwort von rüdiger ist die richtige. schau dir die bibliothek libipq des iptables pakets an. ich denke, dass sie dir weiterhelfen wird.
Das Gurke schrieb:
Die komprimierte Frage: Wie kann ich den gcc dazu zwingen diese Klassen und Methoden zu veröffentlichen ohne den Code als shared object zu erstellen?
wenn du mit host die ausführbare datei meinst, die das plugin läd, musst du diese mit der linker option -export-dynamic compilieren. damit werden alle symbole der exe datei exportiert.
mit hilfe der visibility attribute kannst du den export dann erst pro symbol angeben. ohne -export-dynamic funktionieren die visibility attribute nur in dynamischen bibliotheken.
Als kleiner Tipp: Unter Linux bedeutet eigentlich unter X11. Alle grafischen Oberflächen unter Linux sind eigentlich grafische Oberflächen für X11, welches nicht Linux-spezifisch ist, sondern auch unter anderen Betriebssystemen läuft. Wenn Du also solche Dinge suchst, dann suche, wie man es unter X11 macht.
codepage n00b schrieb:
es geht darum, eine datei mit dem ibm 850 zeichensatz in der debian-konsole anzuzeigen und einzulesen.
Wie wär's, wenn du die Datei einfach erstmal in eine gebräuchlichere Codierung konvertierst, und dann alles weitere damit machst?
Das Konvertieren sollte etwa so funktionieren:
iconv -f CP850 -t UTF-8 alt.txt > neu.txt
Das habe ich auch schon bei größeren Programmen festgestellt. Und strip verkleinert die Datei auch nur um ein paar KB (die -s Option wird von der gcc ignoriert).
besserwisser, wie hast du das gemacht?
ich hoffe, dass ich es richtig verstanden habe:
du hast ein program, das du nicht ändern kannst, das aber einen output an standard out erzeugt. diesen output willst du noch mal verarbeiten und eine webseite daraus erzeugen.
du brauchst dazu die funktion popen.
deine bibliothek sollte dem namensschema "libNAME.so" folgen. gelinkt wird sie dann per option "-lNAME", wobei NAME wieder durch den namen der bibliothek ersetzt wird. es gibt noch ein paar andere sachen zu beachten, die aber vorerst nicht wichtig sind.
Da tritt das selbe Problem auch auf, ebenso wie bei SIGINT. Außerdem soll das Signal ja auch gar nicht abgefangen werden, die Thread sollen einfach so gekillt werden, ohne dass gdb das merkt. Wenn ich das Programm normal in der Shell starte bekomm ich ja auch die gewünschte Meldung "Still alive" -> das ganze funktioniert.
Aber ich hab das ganze jetzt mit pthread_cancel () gelöst, hab nicht gewusst, dass es die Funktion gibt.
Also ich verstehe das nicht ganz
if ($? == 0){
Du führst einen Befehl mit einer system() Funktion aus, und prüfst dann einen Wert? Die Systemfunktion jedoch führt ein Programm extern von deinem Programm aus, d.h. du kannst gar nicht auf irgendwelche Werte prüfen.
Solltest du dies wollen müsstest du z.B. popen() benutzen.
Bei den Start-Optionen in Eclipse kannst du die Library-Paths auch eintragen. Dass das mit der .bashrc nicht funktioniert, wenn du Eclipse auch nicht über eine Bash startest, ist ja wohl klar...
Edit: Die Einträge in der .bashrc könntest du dennoch wirksam werden lassen, indem bei dem Icon die Befehlszeile in bash -c "<bereits da stehende Befehlszeile>" änderst.
unter linux sind filedescriptoren zwar gebunden an einen prozess, worauf sie zeigen aber nicht. per unix socket kannst du filedescriptoren anderen prozessen schicken. man 7 unix wird dir unter "Ancillary Messages" helfen.