amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Shell fernsteuern ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

04.09.2007, 12:56 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Ich suche immer noch nach einer Möglichkeit, den gcc aus meinem Programm heraus fernzusteuern und die Fehlermeldungen mit meinem Programm zu erfassen.

Da ich damit auf direktem wege nicht weiterkomme, frage ich mich ob es möglich wäre aus meinem Programm heraus eine Shell zu starten (möglichst unsichtbar, muss aber nicht sein) dieser Shell Befehle zu übergeben und ALLES was in der Shell ausgegeben wird mit meinem Programm zu erfassen.

Hat da jemand hier Erfahrung mit ?
Vielleicht sogar einen Beispielcode ?
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

04.09.2007, 15:35 Uhr

RhoSigma
Posts: 67
Nutzer
Vesuche es mal mit der DOS Funktion Execute() oder deren neuere (OS2.0)
Pendants System() bzw. SystemTagList().

Bei Execute() gibst du einen Befehl an, eine Batch-Eingabe-Datei, aus der evtl. weitere Befehle gelesen werden sollen und eine Ausgabe-Datei,
die alles schluckt, was von den Befehlen ausgegeben wird.

Die Dateien koennen dabei sowohl CON:-fenster (Shell) als auch normale Dateien sein. Dateiumleitung mit > geht damit glaube ich auch.

[ - Antworten - Zitieren - Direktlink - ]

11.09.2007, 20:56 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@RhoSigma:

Danke für den Hinweis, aber das hilft mir leider auch nicht weiter.
Ich habe mit SystemTags() und Execute() schon alles möglich ausprobiert, kriege es aber nicht hin.
Ein Code Beispiel wie man eine Shell "fernsteuert" wäre nett.
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

11.09.2007, 21:02 Uhr

whose
Posts: 2156
Nutzer
@Kaesebroetchen:

Hast Du Dir mal DICE angesehen? Ich weiß zwar jetzt nicht, ob der Compiler seine Fehlermeldungen im Editor ausgibt, aber es wäre zumindest naheliegend. Und soweit ich weiß, liegt der Sourcecode von DICE und einigen Komponenten vor, eventuell wirst Du da fündig.

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

11.09.2007, 21:35 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@whose:
Danke für den Tip.
Ist allerding gar nicht mal wenig Quellcode....
Und auch nicht gerade übermässig dokumentiert.

Weitere Tips sind also immer noch gerne gesehen !
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

12.09.2007, 16:00 Uhr

akl
Posts: 265
Nutzer
@Kaesebroetchen:

Ist es wirklich so, dass GCC SYS_Input/SYS_Output/NP_Error ignoriert?
Falls ja, liegt das nicht vermutlich an ixemul?
Falls ja, warum nicht einfach alles in eine pipe umleiten?

Kennt ixemul eigentlich das hier?

2>&1 Standardfehler auf den Deskriptor 1 (stdout) umleiten

[ - Antworten - Zitieren - Direktlink - ]

12.09.2007, 18:19 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Zitat:
Original von akl:
@Kaesebroetchen:

Ist es wirklich so, dass GCC SYS_Input/SYS_Output/NP_Error ignoriert?

Es scheint so. Siehe mein code.

Zitat:
Falls ja, liegt das nicht vermutlich an ixemul?

Da bin ich überfragt. Benutzt AROS ixemul ?

Zitat:
Falls ja, warum nicht einfach alles in eine pipe umleiten?

Wenn ich auch nur die geringste Ahnung hätte wie das geht bzw. geeignete Dokumentation hätte um mir das nachzulesen, würde ich das sofort ausprobieren ....

Vielleicht kannst du mir ja einen Schubs in die richtige Richtung geben ?

Zitat:
Kennt ixemul eigentlich das hier?

2>&1 Standardfehler auf den Deskriptor 1 (stdout) umleiten


Scheinbar nicht. Ich habe das probeweise in meinem code hinter "Shell" eingefügt und das ergibt nur ein "Objekt nicht gefunden".
C code:
#include <dos/dos.h>
#include <proto/dos.h>
#include <dos/dostags.h>


int main (int argc, char *argv[])
{
  BPTR stOUT, stERROR;
  long result;
  stOUT = Open("ram:OUT.txt",MODE_NEWFILE);
  stERROR = Open("ram:ERR.txt",MODE_NEWFILE);


  result = SystemTags("shell gcc cd1:test3.c -o ram:test ", SYS_Output,stOUT,
                                                           SYS_Error,stERROR,
                                                           SYS_Input, NULL,
                                                           //SYS_Asynch,TRUE,
                                                           TAG_DONE);





  //if SYS_Asynch is true, the files are closed automatically
  Close(stOUT);
  Close(stERROR);

  return result;
}

--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

12.09.2007, 20:26 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von akl:
Kennt ixemul eigentlich das hier?

2>&1 Standardfehler auf den Deskriptor 1 (stdout) umleiten


Jain.
Diese Syntax stammt von der sh, bzw. ksh oder bash, die darauf basieren. Funktioniert logischerweise also nur, wenn Du auch mit einer dieser shells (einem ixemul-Port davon) arbeitest.

Würde vermutlich funktionieren, wenn Du eine Kommandozeile ala sh 2>&1 -e "ggc ..." verwendest. Damit verlangt Dein Programm aber implizit, dass Du nicht nur gcc, sondern auch die bewusste Shell (passend für die verwendete ixemul-version) installiert hast.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

12.09.2007, 21:59 Uhr

akl
Posts: 265
Nutzer
@Kaesebroetchen:

Sorry, es war nicht erkennbar, dass es um AROS geht. Dass 2>&1 & Co. selbst unter AOS/MOS nicht geht, habe ich allerdings eben auch ausprobiert...


[ - Antworten - Zitieren - Direktlink - ]

12.09.2007, 22:13 Uhr

akl
Posts: 265
Nutzer
@Kaesebroetchen:

Möglicherweise ist der einzige Weg, die cis_#? Einträge des eigenen CLI vor dem Start von GCC umzubiegen - und danach wieder zurück.


[ - Antworten - Zitieren - Direktlink - ]

12.09.2007, 22:17 Uhr

akl
Posts: 265
Nutzer
@Holger:
sh ist bei ADE dabei, ein aktueller GCC ohne ADE und ixemul wiederum fast undenkbar...

[ - Antworten - Zitieren - Direktlink - ]

13.09.2007, 11:32 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von akl:
@Holger:
sh ist bei ADE dabei, ein aktueller GCC ohne ADE und ixemul wiederum fast undenkbar...


Wenn man davon ausgeht, dann muss man als Kommando eigentlich nur
sh -c "gcc 2>&1 weitere Argumente"
angeben. Dann sollten Fehlermeldungen in die Standard-Ausgabe gehen.

Alternativ kann man natürlich auch
sh -c "gcc 2>T:compiler-output weitere Argumente"
angeben, wenn man sowieso in eine temporäre Datei schreiben will. Dann kann man auf diese Weise auch zwischen Standard-Ausgabe und Fehler-Ausgabe unterscheiden. Nur mit der richtigen Reihenfolge wird schwierig, wenn das aufgerufene Programm in beide Ausgaben schreibt.

Ach so, und Dateien, die man als Argumente übergibt, sollte man in einfache Anführungszeichen setzen, falls Sonderzeichen enthalten sind (oder einfach immer)...

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

13.09.2007, 12:34 Uhr

Reth
Posts: 1858
Nutzer
@Kaesebroetchen:

Hm, unter GoldED/Cubic wird sowas ähnliches gemacht. Dort wird der GCC gestartet und dessen Ausgaben werden in einem Shellfenster und in einem Fenster von GoldED/Cubic angezeigt.

Vielleicht kannst Du Dietmar Eilert ja dazu kurz um Rat fragen?

Ciao

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Shell fernsteuern ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.