2009-07-26 6 views

Répondre

4

solution WinAPI:

Vous devez créer le processus (voir CreateProcess) avec entrée redirigée (champ hStdInput dans la structure STARTUPINFO) et de sortie (hStdOutput) à vos tuyaux (voir CreatePipe), et puis juste lire le tuyau (voir ReadFile).

+0

Il est choquant pour moi que ce soit la façon la plus simple de faire des backtics dans VC .. http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx C'est des centaines de lignes de code! –

2

hmm .. MSDN a cet exemple:

int main(void) 
{ 

    char psBuffer[128]; 
    FILE *pPipe; 

     /* Run DIR so that it writes its output to a pipe. Open this 
     * pipe with read text attribute so that we can read it 
     * like a text file. 
     */ 

    if((pPipe = _popen("dir *.c /on /p", "rt")) == NULL) 
     exit(1); 

    /* Read pipe until end of file, or an error occurs. */ 

    while(fgets(psBuffer, 128, pPipe)) 
    { 
     printf(psBuffer); 
    } 


    /* Close pipe and print return value of pPipe. */ 
    if (feof(pPipe)) 
    { 
    printf("\nProcess returned %d\n", _pclose(pPipe)); 
    } 
    else 
    { 
    printf("Error: Failed to read the pipe to the end.\n"); 
    } 
} 

semble assez simple. Juste besoin d'envelopper avec C++ bonté.

+4

Pour citer le MSDN - "lorsqu'il est utilisé dans un programme Windows, la fonction _popen renvoie un pointeur de fichier non valide qui provoquera le blocage indéfini du programme". Cela fonctionnera dans les applications de la console, si c'est utile. –

+0

Eh bien, les applications console est en effet ce que je suis en train d'exécuter. Mais votre commentaire est important .. peut-être une solution plus robuste est en ordre. –

+0

Neil, en fait, j'ai essayé ci-dessus avec "notepad.exe" et il attend juste que je ferme le bloc-notes et renvoie ... –

Questions connexes