von c-Programm auf Kommandozeilentool zugreifen

mrelan

mrelan

Aktives Mitglied
Thread Starter
Dabei seit
26.06.2005
Beiträge
689
Reaktionspunkte
0
Hi,
es ist bestimmt ganz einfach, aber ich habe dazu nichts gefunden, wahrscheinlich weil es zu einfach ist. Das Problem:
Ich möchte aus einem Carbon-Programm (das ich mit XCode in c schreibe) auf ein Kommandozeilentool zugreifen (das z.B. im gleichen Ordner liegt wie mein Programm). Das heißt, ich will das Tool aufrufen wie in der shell und seine Ausgabe in meinem Programm als Variable verwenden.
Warum ich es nicht direkt integriere? Nun, das Tool ist nicht von mir :)
Zur Beruhigung: Ich will es nicht in irgendeiner Form „redistributen” oder so, einfach nur seine Fähigkeiten für mein Programm nutzen. Kann mir da jemand helfen?
Gruß
 
system oder exec heißen solche funktionen meist!
 
Vielen Dank schon mal für die schnelle Antwort. Die Funktionen system, execl, execv, execle, execve, execlp, execvp und wie sie alle heißen scheinen da alle ganz ähnlich zu funktionieren; einziges Problem: Sie liefern nicht die Ausgabe zurück :(
Was hilft es mir, wenn ich weiß ob der Aufruf erfolgreich war, ich will das Ergebnis wissen. Kann ich da irgendwie drauf zugreifen?
Danke!
 
HI!

Was genau gibt den das Tool aus? Vielleicht kannst du ja die Ausgabe des Tools umleiten in eine .dat Datei "tool >> test.dat" und dann die .dat Datei auslesen.
 
Zuletzt bearbeitet:
Ok. Also vielleicht kennt ihr diese Seite hier: http://www.kernelthread.com/software/ams2hid/ams2hid.html
Im Prinzip geht es mir darum, genau das zu tun, was der Autor vorschlägt:
"AMSTracker can be used as a fundamental building block to create arbitrary applications that do something interesting based on the computers orientation".
Ich bin dabei so eine "arbitrary application" zu schreiben und alles was ich darin brauche sind die drei Zahlen, die amstracker ausgibt, weil ich nicht weiß wie ich selbst daran komme und nicht glaube daß der Autor mir den Quelltext gibt ;)
Was mein Programm genau macht will ich nicht verraten, aber wenn es fertig ist kann ich es hier mal zur Begutachtung und allgemeinen Erheiterung posten :)

Edit: Oh, ich seh grad die Seite wurde aktualisiert! Es gibt jetzt ein tool, das die Orientierung direkt in eine Keyboardeingabe übersetzt, wenn ich das richtig verstanden hab. Vielleicht geht es ja auch damit. Trotzdem schon mal Danke für jede Hilfe! :)

Edit: Danke für den Tip janosch, das mit der Datei ist im Prinzip eine gute Idee, nur in dem Fall nicht praktikabel weil das ganze auch noch in Echtzeit passieren muss (im Takt, den die Grafikkarte vorgibt). Es wäre deshalb geschickt, es direkt und nicht über den Umweg Festplatte zu verrechnen.
 
Zuletzt bearbeitet:
Gibt's da popen?
 
Seltsames Verhalten von XCode

Sorry daß ich nochmal nerven muss. Das mit popen klappt super, aber jetzt habe ich ein ganz anderes Problem:
Wenn ich in XCode auf "Build and go" gehe, geht alles wunderbar. Doppelklicke ich aber direkt die Anwendung.app (im XCode Projektordner oder direkt im Finder), dann startet zwar auch die Anwendung, aber es passiert nichts, denn er findet das tool amstracker nicht, obwohl es im richtigen Ordner liegt. XCode findet es ja auch.
Wie kann es sein, daß bei "build and go" überhaupt etwas anderes passiert, als bei einfach nur go, wenn es schon gebuildet ist? Das verstehe ich nicht...
 
Hallo mrealn,

ich denke, dass die Lösung für dein Problem relativ einfach ist. Wie allerdings die Diskrepanz zwischen "Build and Go" und dem Finder zustande kommt weiß ich auch nicht. Fakt ist nur, dass .app-Programme in Wirklichkeit Ordner mit einer eigenen Struktur sind. Die Ausführbare Datei - also das richtige c-Programm sollte im Mac OS-Ordner stehen. Daher musst du in den Path erst noch "../../" einfügen, um erstmal aus den Unterordnern raus zu kommen.
 
Danke Jan-Michael, aber es geht nicht. Wenn ich "./amstracker angebe, dann läuft es im XCode richtig, im finder nicht. Wenn ich "../../amstracker" angebe, läuft es weder in XCode noch im Finder. XCode sagt dann auch: "no such file or directory". Habe auch "../../../amstracker" versucht, weil es nach meiner Logik eigentlich drei ebenden drüber liegen müsste (.app -> Contents -> MacOS), aber es geht trotzdem nicht. Echt seltsam. Zum Glück habe ich eine alte Version, bei der es noch ging, weiß auch nicht was ich seitdem falsch gemacht habe.
 
Zuletzt bearbeitet:
. oder .. sind immer gefährlich. Such das Tool mit den Methoden von NSBundle, und starte es mit dem vollen Pfadnamen.

Alex
 
System App starten...

Google doch "appLaunch +xcode" ist ein beispiel drinnen im zip source file...

ansonsten schreibe... ein neues file main.cpp
im terminal
vi main.cpp
Blumenkohl (apple) i fuege ein...<start

#include <stdio.h>
#include <stdlib.h>

int main ()
{
system ("top");
return 0;
}
/* neue leere line am ende */

<stop
ESC + wq!

dan ...
gcc main.cpp (compilieren ... 1/2 sekunde)

das resultat umbenennen auf top und chmod 0755 top
und jedesmal wo du auf das file click geht das top programm auf...

es geht auch mit einem applescript *.scpt aber ist sicher 20 mehr zeile dabei...



tell application "Terminal"
activate
with timeout of 18 seconds
do script with command "top"


(*
comment
*)
tell window 1
set background color to "blue"
set cursor color to "green"
set normal text color to "yellow"
set bold text color to "red"
set title displays shell path to true
set title displays window size to true
set title displays device name to true
set title displays file name to true
set title displays custom title to true
set custom title to "Il Terminale del mac"
set number of columns to 80
set number of rows to 40
end tell
end timeout
end tell
 
Zurück
Oben Unten