将系统(文件)命令的输出存储为C中的字符串

时间:2013-07-17 08:58:00

标签: c++ c

要获取文件类型,我们可以执行命令

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

输出显示在terminal.But无法使用命令

存储文件类型
char file_type[40] = system("file --mime-type -b filename");

所以如何使用系统(文件)函数将文件类型存储为字符串。

3 个答案:

答案 0 :(得分:4)

请参阅system的手册页:它不会返回执行的命令的输出(但是错误代码或命令的返回值)。

你想要的是popen。它返回一个FILE*,您可以使用它来读取命令的输出(有关详细信息,请参阅popen手册页。)

答案 1 :(得分:4)

您可以像这样使用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;
}

答案 2 :(得分:2)

嗯,我想到的第一个也是最简单的方法是将输出重定向到临时文件,然后将其读入char缓冲区。

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

之后,您可以使用fopenfscanf或任何您想要阅读文件内容的内容。

当然,在尝试读取临时文件之前,你将检查system()的返回值。