GNU/Linux >> Linux Esercitazione >  >> Linux

Come reindirizzare l'output di system() su un file?

stdout è un FILE * puntatore del flusso di output standard. dup2 si aspetta un descrittore di file, inoltre hai incasinato l'ordine dei parametri.Usa

dup2(file, 1);

invece.

Nel modo migliore per fare questa parte. In questo modo non va bene perché probabilmente vorrai ripristinare il tuo output standard dopo questo system chiamata completata. Puoi farlo in vari modi. Puoi dup da qualche parte e poi dup2 indietro (e chiudi il file dup ped uno). Personalmente non mi piace scrivere proprio cat implementazioni come suggerito in altre risposte. Se l'unica cosa che vuoi è reindirizzare un singolo comando di shell con system a un file nel filesystem, allora probabilmente il modo più diretto e semplice è costruire il comando shell per fare questo come

system("ls -l > Result");

Ma devi stare attento se il nome file (Risultato) proviene dall'input dell'utente poiché l'utente può fornire qualcosa come 'Result; rm -rf /*' come nome file.

Inoltre, per quanto riguarda la sicurezza, dovresti considerare di specificare il percorso completo di ls come suggerito nei commenti:

system("/bin/ls -l > Result");

La cosa semplice è usare > anzi:

#include <stdio.h>
int main()
{
    system("ls -l > /some/file");

    return 0;
}

Un'alternativa è usare popen() , qualcosa sulla falsariga di

   #include <stdio.h>
   #include <stdlib.h>
   main()
   {
           char *cmd = "ls -l";
           char buf[BUFSIZ];
           FILE *ptr, *file;

           file = fopen("/some/file", "w");
           if (!file) abort();
           if ((ptr = popen(cmd, "r")) != NULL) {
                   while (fgets(buf, BUFSIZ, ptr) != NULL)
                           fprintf(file, "%s", buf);
                   pclose(ptr);
           }
           fclose(file);
           return 0;
   }

Dovresti usare il popen() library e leggere blocchi di dati dal FILE * restituito e scriverli in qualsiasi file di output che ti piace.

Riferimento.


Linux
  1. Come memorizzare l'output di SHOW PROCESSLIST in un file in MySQL?

  2. Come modificare il reindirizzamento dell'output di un processo in esecuzione?

  3. Come reindirizzare l'output di un programma su un file zip?

  4. Reindirizzamento e uscita del tubo?

  5. Linux:con quale frequenza viene aggiornato il file system Proc su Linux?

Introduzione al file system Linux

Come reindirizzare l'output del comando della shell

Come posso reindirizzare o reindirizzare l'output di curl -v?

Come acquisire l'output di un comando top in un file in Linux?

Come reindirizzare l'intero output di spark-submit a un file

Come reindirizzare l'output del programma come input