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.