Да, вы можете это сделать, но не можете использовать system ()
, вам придется использовать popen ()
вместо этого. Примерно так:
FILE *f = popen("ipdisp", "r");
while (!feof(f)) {
// ... read lines from f using regular stdio functions
}
pclose(f);
Грег не совсем прав. Вы можете использовать систему, но это действительно плохая идея. Вы можете использовать систему, записав вывод команды во временный файл, а затем прочитав файл ... но popen () - гораздо лучший подход. Например:
#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; }
При таком подходе возникает множество проблем ... (переносимость синтаксиса для перенаправления, оставление файла в файловой системе, проблемы безопасности с другими процессами, читающими временный файл и т. Д., И т. Д.)