2009-03-14 9 views
106

Eventuali duplicati:
How can I run an external program from C and parse its output?C: Esegui un comando di sistema e ottieni l'output?

voglio correre un comando in linux e ottenere il testo è tornato di ciò che uscite, ma io Non voglio che questo testo stampato a schermo . C'è un modo più elegante di creare un file temporaneo?

+1

Già discusso ripetutamente. – dmckee

+5

Contrassegnato come duplicato ma non puntarlo. Non penso che questa sia una soluzione perfetta. Nello stesso momento in cui dici che è duplicato, devi indicarci. O meglio!! effettuare un reindirizzamento basato sul numero di reporter duplicati. – erm3nda

risposta

4

È necessaria una sorta di comunicazione tra processi. Utilizzare un pipe o un buffer condiviso.

198

Si desidera la funzione "popen". Ecco un esempio di esecuzione del comando "ls/etc" e output in console.

#include <stdio.h> 
#include <stdlib.h> 


int main(int argc, char *argv[]) 
{ 

    FILE *fp; 
    char path[1035]; 

    /* Open the command for reading. */ 
    fp = popen("/bin/ls /etc/", "r"); 
    if (fp == NULL) { 
    printf("Failed to run command\n"); 
    exit(1); 
    } 

    /* Read the output a line at a time - output it. */ 
    while (fgets(path, sizeof(path)-1, fp) != NULL) { 
    printf("%s", path); 
    } 

    /* close */ 
    pclose(fp); 

    return 0; 
} 
+1

Il reindirizzamento allo stdout può essere una buona idea, in modo da rilevare gli errori. –

+0

come reindirizzare lo stderr allo stdout? –

+8

dovresti usare 'fgets (path, sizeof (path), fp)' not 'sizeof (path) -1'. leggere il manuale – user102008

-6

In genere, se il comando è un programma esterno, è possibile utilizzare il sistema operativo per aiutarti.

command > file_output.txt 

Così il vostro codice C avrebbe fatto qualcosa di simile

exec("command > file_output.txt"); 

Quindi è possibile utilizzare il file file_output.txt.

+1

Il poster ha escluso esplicitamente l'uso di file temporanei, ma è un approccio valido per alcuni casi. Assicurati di non utilizzare un nome file statico utilizzare un nome file casuale sicuro o ti apri agli attacchi symlink che sono problemi di sicurezza. –

+5

questa risposta è completamente errata, perché l'argomento passato a exec non è un comando di shell. – Alnitak

+0

@Alnitak ma questo * è * un esempio ... a chi importa se l'argomento non è un comando effettivo - non è ovviamente * non * un comando? –

Problemi correlati