Greg n'est pas tout à fait correct. Vous pouvez utiliser le système, mais c'est une très mauvaise idée. Vous pouvez utiliser le système en écrivant la sortie de la commande dans un fichier temporaire, puis en lisant le fichier ... mais popen() est une bien meilleure approche. Par exemple:
#include <stdlib.h>
#include <stdio.h>
void
die(char *msg) {
perror(msg);
exit(EXIT_FAILURE);
}
int
main(void)
{
size_t len;
FILE *f;
int c;
char *buf;
char *cmd = "echo foo";
char *path = "/tmp/output"; /* Should really use mkstemp() */
len = (size_t) snprintf(buf, 0, "%s > %s", cmd, path) + 1;
buf = malloc(len);
if(buf == NULL) die("malloc");
snprintf(buf, len, "%s > %s", cmd, path);
if(system(buf)) die(buf);
f = fopen(path, "r");
if(f == NULL) die(path);
printf("output of command: %s\n", buf);
while((c = getc(f)) != EOF)
fputc(c, stdout);
return EXIT_SUCCESS;
}
Il y a beaucoup de problèmes avec cette approche ... (portabilité de la syntaxe pour la redirection, laissant le fichier sur le système de fichiers, les problèmes de sécurité avec d'autres processus de lecture du fichier temporaire, etc., etc.)
Été demandé et répondu à plusieurs reprises. Un exemple: http://stackoverflow.com/questions/43116/how-can-i-run-an-external-program-from-c-and-parse-its-output – dmckee
Désolé je ne savais pas quand je écrit la question, je n'ai pas vu les questions connexes. Merci! – make