stdout
es un puntero FILE *
del flujo de salida estándar. dup2
espera el descriptor de archivo, también ha alterado el orden de los parámetros. Utilice
dup2(file, 1);
en su lugar.
En la mejor manera de hacerlo, esta parte. De esta manera es malo porque probablemente desee restaurar su salida estándar después de que se complete esta llamada system
. Puedes hacer esto de varias formas. Puede dup
en algún lugar y luego dup2
volver (y cerrar el dup
ped uno). Personalmente, no me gusta escribir implementaciones propias cat
como se sugiere en otras respuestas. Si lo único que quieres es redirigir un solo comando shell con system
a un archivo en el sistema de archivos, entonces probablemente la manera más directa y sencilla es construir el comando shell para hacer esto como
system("ls -l > Result");
Pero hay que tenga cuidado si el nombre del archivo (Resultado) proviene de la entrada del usuario ya que el usuario puede proporcionar algo como 'Result; rm -rf /*'
como el nombre del archivo.
Además, en el tema de la seguridad, se debe considerar que especifica la ruta completa a ls
como se sugiere en los comentarios:
system("/bin/ls -l > Result");
Por qué no sólo tiene que utilizar el '>' 'redirección en el comando system'? –
Usa 'system (" ls -l> Result ");' o crea tu propia combinación 'fork()'/'exec *()'. –
No use 'system'. Siempre está mal. Ejecute el proceso secundario usted mismo sin un shell, ya sea usando 'fork' y' execvp' o 'posix_spawn'. –