GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo redirigir la salida de system() a un archivo?

01 es un 13 puntero del flujo de salida estándar. 20 espera el descriptor del archivo, también ha estropeado el orden de los parámetros. Use

dup2(file, 1);

en su lugar.

En la mejor manera de hacer esta parte. Esta forma es mala porque probablemente desee restaurar su salida estándar después de este 30 se completa la llamada. Puede hacer esto de varias maneras. Puedes 47 en algún lugar y luego 54 de vuelta (y cierre el 60 uno). Personalmente, no me gusta escribir 74 implementaciones como se sugiere en otras respuestas. Si lo único que desea es redirigir un solo comando de shell con 86 a un archivo en el sistema de archivos, entonces probablemente la forma más directa y simple es construir el comando de shell para hacer esto como

system("ls -l > Result");

Pero debe tener cuidado si el nombre del archivo (Resultado) proviene de la entrada del usuario, ya que el usuario puede proporcionar algo como 99 como nombre de archivo.

Además, sobre el tema de la seguridad, debería considerar especificar la ruta completa a 106 como se sugiere en los comentarios:

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

Lo sencillo es usar 119 de hecho:

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

    return 0;
}

Una alternativa es usar 126 , algo parecido a

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

Debes usar el 137 función de biblioteca y leer fragmentos de datos del 142 devuelto y escríbalos en el archivo de salida que desee.

Referencia.


Linux
  1. Cómo redirigir la salida a un archivo y salida estándar en Linux

  2. ¿Cómo almacenar la salida de SHOW PROCESSLIST en un archivo en MySQL?

  3. Cómo redirigir la salida a un archivo y stdout

  4. ¿Cuál es la diferencia de redirigir una salida usando >, &>, >&y 2&>?

  5. ¿Cómo agregar la salida a un archivo?

Introducción al sistema de archivos de Linux

Cómo redirigir la salida del comando de shell

¿Cómo canalizo o redirijo la salida de curl -v?

¿Cómo capturar la salida de un comando superior en un archivo en Linux?

Cómo redirigir la salida completa de spark-submit a un archivo

¿Cómo redirigir la salida de un comando a un archivo cuando el comando solicitará las entradas del usuario?