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 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.