2012-02-02 14 views
9

Okay, la mia domanda è questa. Dire che ho un semplice codice C++:Esegui un altro programma in Linux da un programma C++

#include <iostream> 
using namespace std; 

int main(){ 
    cout << "Hello World" << endl; 
    return 0; 
} 

Ora dire che ho questo programma che mi piacerebbe correre nel mio programma, lo chiamano prog. L'esecuzione di questo nel terminale può essere eseguita da:

./prog 

C'è un modo per farlo dal mio semplice programma C++? Per esempio

#include <iostream> 
using namespace std; 

int main(){ 
    ./prog ?? 
    cout << "Hello World" << endl; 
    return 0; 
} 

Qualsiasi feedback sarebbe molto obbligato.

+1

possibile duplicato di http://stackoverflow.com/questions/478898/how-to-execute-a-command-and-get-output-of-command- entro-c – hopia

+1

@hopia, non un duplicato. Quello che hai indicato è una domanda sugli usi avanzati di 'system()'; questo poster aveva solo bisogno di sapere dell'esistenza della funzione. –

risposta

13

Si desidera la chiamata alla libreria system(); vedi system(3). Ad esempio:

#include <cstdlib> 

int main() { 
    std::system("./prog"); 
    return 0; 
} 

La stringa di comando esatta dipenderà dal sistema, ovviamente.

3

Prova system(3):

system("./prog"); 
+0

In . E forse schiaffi un codice: su quel sistema. –

3

Si potrebbe noi il comando di sistema:

system("./prog"); 
3

Si potrebbe utilizzare una chiamata di sistema come questo: http://www.cplusplus.com/reference/clibrary/cstdlib/system/

attenzione se si utilizza l'input dell'utente come un parametro, è un buon modo per avere alcune conseguenze non volute. Sfrega tutto!

In genere, le chiamate di sistema possono essere interpretate come una cattiva forma.

8

È inoltre possibile utilizzare popen

#include <stdio.h> 

int main(void) 
{ 
     FILE *handle = popen("./prog", "r"); 

     if (handle == NULL) { 
       return 1; 
     } 

     char buf[64]; 
     size_t readn; 
     while ((readn = fread(buf, 1, sizeof(buf), handle)) > 0) { 
       fwrite(buf, 1, readn, stdout); 
     } 

     pclose(handle); 

     return 0; 
} 
Problemi correlati