Сохранять вывод команды system (file) в виде строки в C

Чтобы получить тип файла, мы можем выполнить команду

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

Выход выводится на терминал. Но не удалось сохранить тип файла с помощью команды

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

Итак, как сохранить тип файла в виде строки с помощью функции system (file).

См. Справочную страницу system : он не возвращает результат выполнения команды (но код ошибки или возвращаемое значение команды).

То, что вы хотите, – это popen . Он возвращает FILE* который вы можете использовать для чтения вывода команды (подробности см. В разделе « popen ).

Вы можете использовать popen следующим образом:

 #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; } 

Хммм первым и самым простым способом, который приходит мне на ум, чтобы добиться того, что вы хотите, было бы перенаправить вывод в временный файл, а затем прочитать его в буфере символов.

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

после этого вы можете использовать fopen и fscanf или все, что хотите прочитать содержимое файла.

Конечно, у вас будет проверка возвращаемого значения system (), прежде чем пытаться прочитать временный файл.