4

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

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

输出显示到终端。但无法使用命令存储文件类型

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

那么如何使用 system(file) 函数将文件类型存储为字符串。

4

3 回答 3

4

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

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

于 2013-07-17T09:03:08.300 回答
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;
}
于 2013-07-17T09:05:40.753 回答
2

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

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

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

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

于 2013-07-17T09:04:51.700 回答