Quellcode aus Programm mittels execl kompilieren



  • Hi !

    Ich habe einen Server der einen SourceCode erhält. Dieser soll auf dem Server kompiliert und danach ausgeführt werden. Die Ausgabe soll an den Client zurückgesendet werden.

    Prob 1: Wie kann ich ein Programm aus einem laufenden Prog kompilieren?
    Mein Vorgehen bis jetzt lautet so: nach dem ich einen neuen Prozess geforkt habe, wird das hier im Child ausgeführt

    if( execl("gcc", "-o","prog", "source.c", NULL ) < 0)
    	  printf("Fehler beim Ausführen von prog");
    

    2. Prob: Wenn ich das Prog gestartet habe wie kann ich möglichst einfach die Ausgabe in einer Datei schreiben, damit ich die danach aufrufen kann und den Inhalt an den Client zurücksenden kann ?

    Über Hilfe würde ich mich freuen ist nämlich ziemlich dringend.

    mfg
    tom



  • Leite sie halt um:

    programmname > dateiname
    


  • Hi !

    Ja das hab ich mir auch schon gedacht. Aber leider funktioniert der Aufruf nciht den ich oben gepostet habe.

    Kann mir hier jemand weiterhelfen. execl müsste ich jedenfalls richitg verwenden.

    mfg
    tom



  • hi,
    wenn ich mich nicht irre musst du bei den exec funktionen
    als ersten parameter den programmnamen angeben
    (d.h. er wuerde von gcc nicht ausgewertet).
    also:
    execl("gcc", "gcc", "-o","prog", "source.c", NULL )

    damit gcc als argv[0] den programmnamen bekommt.
    bei denem beispiel wuerde das "-o" nicht ausgewertet,
    weil es fuer gcc als argv[0] erscheint.



  • 2. Prob: Wenn ich das Prog gestartet habe wie kann ich möglichst einfach die Ausgabe in einer Datei schreiben, damit ich die danach aufrufen kann und den Inhalt an den Client zurücksenden kann ?

    dafür gibt es pipes. Schau dir mal man: pipe(2) an.



  • Hi !

    Vielen Dank, aber leider funktioniert das mit dem execl("gcc", "gcc", ...) auch nicht.

    Hat sonst noch jemand eine Idee ?

    mfg
    tom



  • execl musst du einen absoluten Pfad mit geben (zB. /usr/bin/gcc). Benutze man: execlp(3)



  • Hi !

    Vielen Dank, das mit dem absoluten Pfad hat funktioniert.

    mfg
    tom


Anmelden zum Antworten