Hallo, ich habe ein C-Skript das mit Hilfe des system() befehls einige bash kommandos ausführen kann. Jetzt würde ich aber gerne einige der bash befehle in einem neuen Terminal ausführen. Ich weiß aber nicht wie das geht :) Alex
Alex G. schrieb: > Hallo, > ich habe ein C-Skript das mit Hilfe des system() befehls einige bash > kommandos ausführen kann. Ich nehm an ein c Programm, das kompiliert werden musste... Ein Skript wird ja interpretiert. Vielleicht hilft dir: http://www.tutorials.de/forum/linux-unix/348599-neues-terminal-fenster-fuer-bash-scripte.html hier steht wie man ein Fenster für Befehle öffnen kann, vielleicht kannst du dir das ja in system() rein flicken. Hier werden dann Skripte für die bourne again shell verwendet. Ich google mal noch ein bisschen danach :-D Sebastian P.S. ach ja, hilfreich sind noch Informationen wie z.B. welche konsole du verwendest, ob du kde 3.5 oder 4.2 oder gar gnome verwendest, welchen befehl du aufrufen möchtest und so weiter...
Vielen dank für deine Antwort. Sebastian Brendler schrieb: > P.S. ach ja, hilfreich sind noch Informationen wie z.B. welche konsole > du verwendest, ob du kde 3.5 oder 4.2 oder gar gnome verwendest, welchen > befehl du aufrufen möchtest und so weiter... Ich benutze gnome (Ubuntu9.10) und ich möchte diesen Befehl ausführen: $ rfcomm connect /dev/rfcomm0 00:XX:XX:XX:XX:XX 1 > Ich nehm an ein c Programm, das kompiliert werden musste... Ein Skript > wird ja interpretiert. Du nimmst richtig an :) Warum ich den Befehl in einem neuen Terminalfenster ausführen will? Der Grund ist einfach der Befehl belegt den ganzen Terminal und ich brauche den Terminal im folgenden für mein C-Programm noch.
Dann musst du halt mit system() dein neues Terminal starten. Je nach Umgebung und Vorliebe system( "xterm ..." ) oder system( "konsole ..." ) etc.
warum das drive nicht fest einbinden so das es so bald es auftaucht automatisch eingebunden wird ? in der /etc/bluetooth/rfcomm.conf z.b. rfcomm0 { # Automatically bind the device at startup bind yes; # Bluetooth address of the device device 00:00:00:00:00:00; # RFCOMM channel for the connection channel 1; # Description of the connection comment "BT-Bus Platine"; }
theborg schrieb: > warum das drive nicht fest einbinden so das es so bald es auftaucht > automatisch eingebunden wird ? > ... Tja Alex, damit hast du auf deine Frage eine erschöpfende Antwort! :-)
Unter Unix-Systemen gibt es i.d.R. keinen Mechanismus, aus einem Prozess einen zweiten zu starten, wie man es erwarten würde. Der übliche Weg besteht darin, den aktuellen Prozess mit fork() aufzuspalten und einen der beiden Prozesse danach mittels exec*() zu ersetzen. Sinnvoll sind auch pipe(), dup(), dup2() und/oder popen().
Das ist richtig, wenn man sich die OS-Seite ansieht. Ändert aber nichts daran, daß auch unter Unix und Linux in der C-Lib ein system() ist, in dem letztlich natürlich fork() und exec() stattfinden. Ich denke, mit system() kommt der TE zügiger voran.
>Der Grund ist einfach der Befehl belegt den ganzen Terminal und ich >brauche den Terminal im folgenden für mein C-Programm noch. Ist das Starten dieses Befehls mit "befehl &" im Hintergrund keine Option? Gast
1 | system("xterm -e 'rfcomm connect /dev/rfcomm0 00:XX:XX:XX:XX:XX 1'") |
Wenn das Fenster nach Ausführung des Kommandos offen bleiben soll, kannst du's auch so schreiben:
1 | system("xterm -e 'rfcomm connect /dev/rfcomm0 00:XX:XX:XX:XX:XX 1; read'") |
Hi,
vielen Dank für eure Antworten.
Einbinden ist keine so gute Idee, ich werde das Programm auf mehreren
verschiedenen Rechnern laufen lassen, die auch ständig wechseln.
> system("xterm -e 'rfcomm connect /dev/rfcomm0 00:XX:XX:XX:XX:XX 1; read'")
Das funktioniert schon ganz gut.
Das Problem ist jedoch der rfcomm Befehl muss nebenbei laufen, das heißt
das C-Programm und der Befehl müssen gleichzeitig laufen. Das C-Programm
wird nicht fortgesetzt solange der Befehl ausgeführt wird.
dann probier doch mal:
1 | system("xterm -e 'rfcomm connect /dev/rfcomm0 00:XX:XX:XX:XX:XX 1; read' &") |
kannst dir ja in deinem Programm die PID des gestarteten Prozesses merken, damit du es nachher auch killen kannst.
Dann aber nicht mit system, sondern dann muß man fork+exec nehmen (oder man müsste in den system-Aufruf etwas reinbasteln, was die pid liefert)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.