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

78
8

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


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

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


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

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

спросил(а) 2013-07-17T11:57:00+04:00 6 лет, 7 месяцев назад
1
Решение
77

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

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

ответил(а) 2013-07-17T12:03:00+04:00 6 лет, 7 месяцев назад
79

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

#include <stdio.h>
#include <stdlib.h>

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

ответил(а) 2013-07-17T12:05:00+04:00 6 лет, 7 месяцев назад
59

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


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

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


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

ответил(а) 2013-07-17T12:04:00+04:00 6 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема