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

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

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

输出显示在terminal.But无法使用该命令存储文件类型

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

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

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

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

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