So nebenbei sei bemerkt, dass in einem C++-Programm system fast immer die falsche Lösung ist (gilt eigentlich für praktisch jede Programmiersprache). system ist ineffizient und das parsen der Ausgabe unzuverlässig. Das Ausgabeformat könnte sich bei der nächsten Version ein wenig verändern. Schon bei meinem Fedora 16 ist die Ausgabe "inet xxx.xxx.xxx.xxx" statt "inet addr: xxx.xxx.xxx.xxx".
System startet einen Prozess, was eine relativ teure Angelegenheit ist. In deinem Fall sogar mehrere. Nämlich insgesamt 6: eine shell, die den String erst mal versteht und dann 5 Prozesse in der Pipe. Und selbst deine Pipe ist nicht wirklich sinnvoll gestaltet. Vielen ist leider nicht bekannt, dass awk grep ersetzen kann. Und wenn man sowieso awk aufruft, kann man sich grep sparen.
Außerdem matcht das grep 127.0.0.1 auch bei 127101011, da der Punkt für ein beliebiges Zeichen steht. Was Du mit dem cut machst, verstehe ich nicht.
Überhaupt, wie kommt es, dass Du die 127.0.0.1 auf dem wlan0-interface erwartest? Es ist normalerweise auf dem Loopback interface konfiguriert.
Dein Aufruf wäre in etwa so effizienter:
ifconfig wlan0 | awk '/inet addr:/ && ! /127\.0\.0\.1/ { print $1 }'
Das reduziert die Anzahl der Prozesse um 3.
Deine letzte Lösung ist allerdings die richtige. Das ist viel besser, als mit system zu hantieren.
Wie wärs denn mit midi. Schau dir mal virtual-keyboard als quelltext an
An dem Teil habe ich auch schon mal gebastelt um 2 Instrumente gleichzeitig bei
einem Tastendruck auszugeben. Das als Muster und als Tastendruck ne Zeitschleife sollte dein Problem lösen.
nman schrieb:
Ich kann das gerade nur mit "sleep 10" oä. statt xfce4-terminal ausprobieren, aber das scheint hier (OS zu funktionieren.
konnte es mit killall prozessname lösen!
SeppJ schrieb:
Ich vermute mal, dass in dem speziellen makefile später auch ein Kommando kommt, welches *~ entfernt. Oder dieses Makefile ist nicht besonders gut.
Dann scheint wohl letzteres der Fall zu sein.
Die Mecker von rm umgeht man doch auch schon mit dem ersten Dummy-file oder? Das zweite brauchts also im Prinzip gar nicht?!
Wenn du meinst, dass Dateien mit '~' am Ende für rm unsichtbar wären, dann ist dem nicht so. Das ist eine einstellbare Konvention für ls, für alles andere sind das ganz normale Dateien.
Nein, ich meine das Pattern '*.o' matched dann _~ nicht
Wäre da nicht ein grep oder awk viel einfacher? Das einzige was mich davon abhält, eine Komplettlösung hinzuschreiben ist, dass
oder bekomme ich eine Nummer was nicht in die Liste steht.
unverständlich und
Entsprechend dieser muss ich das Ergebnis in einem anderen File eintragen
ungenau ist.
ich glaube du kannst auch einfach den direkten Pfad angeben: gcc ... -l/path/to/lib.so
So geht das zumindest mit statischen Libs. Bei dynamischen ist eh die Frage was du eigentlich erreichen willst. Spätestens beim Ausführen müssen dann ganz andere Dinge in betracht gezogen werden, welche Library vom Programm benutzt wird: RPATH, LD_LIBRARY_PATH, /etc/ld.so.conf ...
Keine Ahnung was du aktuell gerade machst und wo es Probleme gibt, aber schau dir doch bitte mal Beispielcode an:
http://www.google.com/search?q=opencv+multithreading
Also ich denke C++ wäre wegen den Klassen die bessere Wahl
Was genau ist asynchrone I/O? Die Idee von den Threads kenne ich noch aus meiner Java-Zeit
Mit "gleichberechtigt" meine ich, dass ich 2 gleiche Programme im Netzwerk habe, beide lauschen auf dem gleichen Port. Dann soll es egal sein, ob sich Programm A mit Programm B verbindet oder umgekehrt. Also sollte in beiden Programmen nach dem Verbindungsaufbau jeweils ein ClientSocket mit dem jeweils anderen Programm verbunden sein. Der Server soll dann unabhängig von den ClientSockets weiterlauschen.
All diese Fragen solltest du dir nie zu stellen brauchen (daher ist es auch nicht dokumentiert), dazu sind doch die ganzen Auswertungsmakros in der sys/stat.h da:
if ( mode & S_IRUSR ) { /* User hat Read-Berechtigung*/ }
if ( mode & S_IXUSR ) { /* User hat Execute-Berechtigung*/ }
...
if ( mode & S_IWOTH ) { /* Other hat Write-Berechtigung*/ }
(Das ist Beispielcode, um dir den Mechanismus zu zeigen. Mach das nicht direkt so nach, sondern irgendwie vernünftig.)
Schau mal, so kannst du dir das vielleicht leichter vorstellen:
~ % irb
>> (0b0101 & 0b0111).to_s(2)
=> "101"
>> (0b0100 | 0b0001).to_s(2)
=> "101"
(Das "0b"-Präfix ist dabei nur Ruby-Notation für Binärzahlen.)
Shared Memory legt man ja normalerweise an, damit andere Prozesse auch darauf zugreifen können. die Startadresse des Shared Memory Blocks kann aber bei jedem beteiligten Prozeß anders sein, deshalb im Shared Memory nur mit Offsets und nicht mit Pointern arbeiten
Und unter AIX 6.1 gibt es keinen Unterschied zwischen fork und vfork . Aber sicher gibt es nicht so viele, die so etwas zu Hause haben. Nur der Vollständigkeit halber wollte ich das mal erwähnen, da ich zufällig gerade Zugriff auf so eine Kiste habe.
Hat vielleicht doch noch jemand eine Idee? Habe schon stundenlang bei Google gesucht... aber nichts gefunden!
Oder geht das schlicht und einfach mit rein-C gar nicht?
Kann auch schon wieder zu. Setzen von CFLAGS und LDFLAGS hat das Problem gelöst.
cflags: -Wl,--rpath=/usr/lib/freetz/
ldflags: -Wl,--rpath=/usr/lib/freetz/
bei gesetzter hintergrundfarbe kommt xterm scheinbar nicht mit dem zeilenumbruch klar... also erst standart attribute setzen, dann zeilenumbruch...
Mfg Benny