Domanda

Come posso catturare l'output di un altro processo usando C puro? Puoi fornire un codice di esempio?

EDIT: supponiamo che Linux. Sarei interessato a "abbastanza portatile" codice. Tutto quello che voglio fare è eseguire un comando, catturarne l'output ed elaborarlo in qualche modo.

È stato utile?

Soluzione

Esistono diverse opzioni, ma dipende in qualche modo dalla tua piattaforma. Detto questo popen dovrebbe funzionare nella maggior parte dei luoghi, ad esempio

#include <stdio.h>

FILE *stream;
stream = popen("acommand", "r");

/* use fread, fgets, etc. on stream */

pclose(stream);

Nota che questo ha un uso molto specifico, crea il processo eseguendo il comando acommand e allega i suoi standard in modo tale da renderlo accessibile dal tuo programma attraverso lo stream < code> * .

Se è necessario connettersi a un processo esistente o eseguire operazioni più complesse, potrebbe essere necessario esaminare altre strutture. Unix ha vari meccanismi per collegare un processo stdout ecc.

In Windows puoi usare l'API CreateProcess per creare un nuovo processo e collegare il suo handle di output standard a ciò che desideri. Windows supporta anche popen .

Non esiste un modo C semplice per fare ciò di cui sono a conoscenza, quindi dipenderà sempre in qualche modo dalle API specifiche della piattaforma.

In base alle tue modifiche popen sembra l'ideale, è "abbastanza portatile", non credo che ci sia un sistema operativo unix senza di esso, anzi fa parte della specifica Single Unix, e POSIX e ti permette di fare esattamente quello che vuoi, eseguire un elaborare, afferrarne l'output ed elaborarlo.

Altri suggerimenti

Se è possibile utilizzare le pipe di sistema, è sufficiente reindirizzare l'output dell'altro processo al proprio programma C e nel proprio programma C, leggere semplicemente l'input standard.

otherprocess | your_c_program

Quale sistema operativo stai usando? Su OS di tipo * nix se il processo è in uscita su STDOUT o STDERR è ovviamente possibile utilizzare le pipe

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top