Almacena la salida del comando del sistema (archivo) como una cadena en C

Para obtener el tipo de archivo podemos ejecutar el comando.

system("file --mime-type -b filename"); 

La salida se muestra en terminal.Pero no se pudo almacenar el tipo de archivo con el comando

 char file_type[40] = system("file --mime-type -b filename"); 

Entonces, cómo almacenar el tipo de archivo como una cadena utilizando la función del sistema (archivo).

Consulte la página de manual del system : no devuelve la salida del comando ejecutado (sino un código de error o el valor de retorno del comando).

Lo que quieres es popen . popen un FILE* que puede usar para leer la salida del comando (vea la página de manual de popen para más detalles).

Puedes usar popen así:

 #include  #include  int main( int argc, char *argv[] ) { FILE *fp; char file_type[40]; fp = popen("file --mime-type -b filename", "r"); if (fp == NULL) { printf("Failed to run command\n" ); exit -1; } while (fgets(file_type, sizeof(file_type), fp) != NULL) { printf("%s", file_type); } pclose(fp); return 0; } 

Hmmm, la primera y más fácil forma de llegar a mi mente para lograr lo que quiere es redirigir la salida a un archivo temporal y luego leerlo en un búfer de caracteres.

 system("file --mime-type -b filename > tmp.txt"); 

después de eso puedes usar fopen y fscanf o lo que quieras para leer el contenido del archivo.

Por supuesto, tendrá que verificar el valor de retorno de system () antes de intentar leer el archivo temporal.