Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    16

    [C] Come faccio a far compilare un programma ad un programma stesso?

    Mi spiego meglio:

    dovrei riuscire a creare un programma che mi compili un altro programma.

    Ho provato semplicemnete con una exec che mi esegue gcc ma mi si blocca tutto.

    Qualcuno ha un'altra idea?

  2. #2
    Fornisci ulteriori informazioni tipo il sistema operativo ed il programma da compilare (è un semplice sorgente C o un progetto?).
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    16
    innanzitutto grazie per la risposta.

    Sono su linux...per la precisione su ubuntu 8.04,mentre il programma è un semplice sorgente c.

    In pratica sto lavorando su un client che invia al server un file e il server dovrà compilarlo.Non ho problemi sull'invio e il resto ma il server, al momento, non riesce a compilare il programma.

  4. #4
    facci vedere la chiamata ad exec , fai un fork o passi direttamente il controllo ?
    Io comunque chiamere make.
    ciao
    sergio

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    16
    int i=fork();
    if (i = 0)
    execl("gcc","prova.c",NULL);


    immaginavo che qualcosa di così semplice andasse bene.Ma evidentemente non è che così

  6. #6
    codice:
    if(i == 0)
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    16
    XD....ops


    Scusate


    Ma comunque non va

  8. #8
    Originariamente inviato da After
    int i=fork();
    if (i = 0)
    execl("gcc","prova.c",NULL);


    immaginavo che qualcosa di così semplice andasse bene.Ma evidentemente non è che così
    Codice PHP:
    int i=fork();  
        if (
    == 0)      
        
    execl("gcc","./prova.c",NULL); 

  9. #9
    scusami per la risposta, ero un po' fulminato, prova questo codice
    codice:
    #include <stdio.h>
    int main ()
    {
            int i=fork();   
            if (i == 0) {      
                    printf( "Sono nel child e chiamo gcc\n" );
                    execl("/usr/bin/gcc", "-o" , "prova", "prova.c", NULL);
                    printf( "se sono qui c'è un errore\n" );
            }                
            else
                    printf( "Sono nel parent\n" );
            
            return ( 0 );               
    
    }
    così ti dovrebbe funzionare, è come se chiamassi
    gcc -o prova prova.c
    generando l'eseguibile prova dal sorgente prova.c
    La execl vuole un path completo.
    Tiene però presente che è meglio se usi la popen che ti apre un pipe, in questa maniera puoi avere l'output della chiamata.
    ciao
    sergio

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    16
    Originariamente inviato da mondobimbi
    scusami per la risposta, ero un po' fulminato, prova questo codice
    codice:
    #include <stdio.h>
    int main ()
    {
            int i=fork();   
            if (i == 0) {      
                    printf( "Sono nel child e chiamo gcc\n" );
                    execl("/usr/bin/gcc", "-o" , "prova", "prova.c", NULL);
                    printf( "se sono qui c'è un errore\n" );
            }                
            else
                    printf( "Sono nel parent\n" );
            
            return ( 0 );               
    
    }
    così ti dovrebbe funzionare, è come se chiamassi
    gcc -o prova prova.c
    generando l'eseguibile prova dal sorgente prova.c
    La execl vuole un path completo.
    Tiene però presente che è meglio se usi la popen che ti apre un pipe, in questa maniera puoi avere l'output della chiamata.
    ciao
    sergio

    Ecco appunto...con la exec sono riuscito a risolvere,ma non riesco a prendere il risultato dell'esecuzione.
    Con popen dovrei risolvere?

    edit: Mi spiego meglio

    Codice PHP:
        if(pid==0)
                    {
                        
    execlp("gcc","gcc","prova3.c",NULL);
                        exit(
    0);
                    } 
                    else    
                    {
                        
    wait(NULL);
                        
    execlp("./a.out","./a.out",NULL);
                        exit(
    0);
                    } 
    Questo è il codice con il quale avevo risolto il problema,ma ora dovrei prendere il risultato dell'esecuzione di a.out.Come faccio?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.