简体   繁体   中英

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

To get the type of file we can execute the command

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

The output displays in to terminal.But could not store the file type using the command

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

So how to store file type as a string using system(file) function.

See the man page of system : It does not return the output of the command executed (but an errorcode or the return value of the command).

What you want is popen . It return a FILE* which you can use to read the output of the command (see popen man page for details).

You can use popen like this:

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

Hmmm the first and easiest way that comes to my mind for achieving what you want would be to redirect the output to a temp-file and then read it into a char buffer.

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

after that you can use fopen and fscanf or whatever you want to read the content of the file.

Ofcourse, youl'll have the check the return value of system() before attempting to read the temp-file.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM