von c-Programm auf Kommandozeilentool zugreifen

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von mrelan, 17.02.2006.

  1. mrelan

    mrelan Thread Starter MacUser Mitglied

    Beiträge:
    685
    Zustimmungen:
    0
    MacUser seit:
    26.06.2005
    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ß
     
  2. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.042
    Zustimmungen:
    1.317
    MacUser seit:
    13.09.2004
    system oder exec heißen solche funktionen meist!
     
  3. mrelan

    mrelan Thread Starter MacUser Mitglied

    Beiträge:
    685
    Zustimmungen:
    0
    MacUser seit:
    26.06.2005
    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!
     
  4. janosch

    janosch MacUser Mitglied

    Beiträge:
    1.298
    Zustimmungen:
    6
    MacUser seit:
    24.10.2003
    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: 17.02.2006
  5. mrelan

    mrelan Thread Starter MacUser Mitglied

    Beiträge:
    685
    Zustimmungen:
    0
    MacUser seit:
    26.06.2005
    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: 17.02.2006
  6. BalkonSurfer

    BalkonSurfer Banned

    Beiträge:
    5.164
    Zustimmungen:
    0
    MacUser seit:
    27.07.2003
    Gibt's da popen?
     
  7. mrelan

    mrelan Thread Starter MacUser Mitglied

    Beiträge:
    685
    Zustimmungen:
    0
    MacUser seit:
    26.06.2005
    yeah! Das scheint zu funktionieren. Danke!
     
  8. mrelan

    mrelan Thread Starter MacUser Mitglied

    Beiträge:
    685
    Zustimmungen:
    0
    MacUser seit:
    26.06.2005
    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...
     
  9. Jan-Michael

    Jan-Michael MacUser Mitglied

    Beiträge:
    391
    Zustimmungen:
    0
    MacUser seit:
    28.02.2005
    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.
     
  10. mrelan

    mrelan Thread Starter MacUser Mitglied

    Beiträge:
    685
    Zustimmungen:
    0
    MacUser seit:
    26.06.2005
    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: 19.02.2006
Die Seite wird geladen...

Diese Seite empfehlen