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

Store output of system(file) command as a string in C

本文关键字:字符串 存储 输出 系统 文件 命令      更新时间:2023-10-16

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

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

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

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

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

您可以这样使用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 commandn" );
      exit -1;
  }
  while (fgets(file_type, sizeof(file_type), fp) != NULL) {
      printf("%s", file_type);
  }
  pclose(fp);
  return 0;
}

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

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

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

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

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

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