Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [C] Modificare e compilare un .c su server

    Ciao a tutti.

    So che forse avrei potuto trovare un titolo migliore per la discussione ma la questione è proprio questa:

    ho sviluppato un applicazione in C che, girando su di un server, dovrà elaborare dei dati presi da una pagina HTML.

    Il punto è che il file .c contenente la funzione main sarà modificato di volta in volta proprio in base ai parametri presi dalla pagina HTML (in realtà ne verrà modificata una sola riga ad ogni esecuzione...) e pertanto, dovrà essere ricompilato di volta in volta (immagino qualcosa tipo una system call che mi permetta di chiamare gcc).

    Ora, quello che volevo chiedervi è: secondo voi che "tecnologia" dovrei utilizzare per sviluppare il tutto? Alcune persone mi consigliavano JSP, altri PHP. Secondo voi qual'è sarebbe la soluzione ottimale e/o più semplice?

    Grazie 1000...

  2. #2
    Di solito non è necessario ricompilare un eseguibile per adeguarlo a nuovi dati... in cosa deve essere modificato esattamente? Probabilmente c'è una soluzione migliore al tuo problema. In ogni caso non ho capito esattamente in base a che input l'eseguibile dovrebbe essere ricompilato.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Il punto è che il file .c contenente la funzione main sarà modificato di volta in volta proprio in base ai parametri presi dalla pagina HTML (in realtà ne verrà modificata una sola riga ad ogni esecuzione...) e pertanto, dovrà essere ricompilato di volta in volta (immagino qualcosa tipo una system call che mi permetta di chiamare gcc).
    Non capisco il perché di questa esigenza inusuale, non ti basta un normalissimo CGI?

  4. #4

    Re: [C] Modificare e compilare un .c su server

    Originariamente inviato da FastMagister
    ....
    Il punto è che il file .c contenente la funzione main sarà modificato di volta in volta proprio in base ai parametri presi dalla pagina HTML (in realtà ne verrà modificata una sola riga ad ogni esecuzione...) e pertanto, dovrà essere ricompilato di volta in volta (immagino qualcosa tipo una system call che mi permetta di chiamare gcc).
    ...
    Ricompilare del codice in base ad un input sembra una cosa insensata , anche se nel tuo caso dovresti ricompilare una sola riga di codice . La via logicamente praticata è che il tuo codice debba evolvere a seconda dell'input . Nel caso in cui la questione non ti fosse chiara cerca di dare dei particolari del tuo problema . Saluti

  5. #5
    Avete ragione, cercherò di farmi capire meglio:

    ho sviluppato una decina di funzioni in C ognuna memorizzata in un diverso file .c, per cui ho i file fun1.c , fun2.c, ecc... Ognuno di questi file contiene una singola funzione scritta in C, ma nessuno di essi contiene una funzione main.

    Ora, dovrei sviluppare un file .c contenente un main program che, dopo aver acquisito da pagina HTML determinati parametri immessi dall'utente (tra cui l' ID della fun da usare...) richiami di volta in volta la funzione fun scelta...

    Pensavo alla storia del ricompilare ogni volta, semplicemente perchè il file contenente il main varia ogni volta (a volte richiamerà fun1 , altre fun2 e cosi via...) anche se in effetti mi sembra una soluzione quantomeno "articolata"...

    Voi che proporreste?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ci sono diversi metodi (tra cui il piu' elegante e corretto sarebbe quello di utilizzare un puntatore a funzione per eseguire quella che ti serve al momento) ma quello piu' semplice, se le funzioni non sono moltissime, potrebbe essere uno

    switch (valorecheselezionalafunzione)
    {
    case valore1:
    funz1();
    break;
    ...
    }

  7. #7
    Ok, lo switch-case sarebbe un ottima soluzione ma...

    poniamo che i file fun1.c , fun2.c , ecc. contengano l'implementazione in C di alcune funzioni matematiche. Poniamo cioè che questi file siano fatti sul modello del seguente esempio:
    codice:
    #include<math.h>
    
    double fun(double *x)
    {
        return sqrt(*x) * log(*x);
    }
    dove in questo caso la funzione matematica è radice quadrata di x * logaritmo naturale di x.

    Bene. Se ora volessi che il mio file .c con la funzione main lavori su una generica funzione matematica (passata dall'utente come stringa tramite pagina HTML...) e visto che le funzioni matematiche sono infinite, dovrei in qualche modo (dopo aver fatto un parsing della stringa) scrivere il mio file fun di volta in volta sul server e quindi necessariamente ricompilarlo?

    In altre parole, visto che non posso a priori scrivere un file funX.c per ogni possibile funzione matematica (dato che sono infinite...) devo in qualche modo fargli creare tale file a "run-time". E tale file per essere richiamato dal main e quindi eseguito andrà ovviamente compilato... giusto?

    Voi come fareste? Soluzioni alternative?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se tu avessi detto sin dall'inizio che dovevi elaborare una funzione matematica che ti arrivava dall'esterno, sarebbe stato meglio ...

    In questo caso, quello che devi scrivere e' un parser di espressioni ... che non e' una banalita' ma e' l'approccio giusto rispetto a questo tipo di problemi (ovviamente la ricompilazione del codice rimane una cosa insensata ...).

    Un esempio (ma e' il primo che ho trovato ... ce ne sono tanti) e' questo

    http://www.yann-ollivier.org/mathlib/mathexpr.html

  9. #9

  10. #10
    Benissimo, mi sa che ci siamo quasi, sono riuscito a schiarirmi le idee.

    Vada per il parser di espressioni (che mi consente di evitare il discorso della ricompilazione ad ogni esecuzione poichè lo inserirei nello stesso file della funzione main... quindi va scritto anch'esso in C, giusto?).

    Ora l'ultima domanda, sicuramente molto più banale... Una volta realizzata tutta la parte in C per l'elaborazione vera e propria, come sarebbe meglio far "comunicare" l'applicazione C con la pagina HTML? Tramite PHP? JSP? O come...?

    Grazie 1000 a tutti in ogni caso...

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.