Pregunta

En un laboratorio de seguridad de la información en el que estoy trabajando, me han asignado la tarea de ejecutar varios comandos con una sola llamada a " system () " (Escrito en C, corriendo en Fedora). ¿Cuál es la sintaxis que me permitirá ejecutar más que el comando a través de system ()? (La idea es que podría ejecutar comandos arbitrarios a través de un programa que se ejecuta en una computadora remota, si el programa interactúa con el sistema operativo a través de la llamada al sistema ()).

I.e .:

char command[] = "????? \r\n"; 
system(command);
¿Fue útil?

Solución

Eso depende de que el shell sea invocado para ejecutar los comandos, pero en general la mayoría de los shells usan ; para separar los comandos, de modo que algo como esto debería funcionar:

command1; command2; command3

[EDITAR]

Como mencionó @dicroce, puede usar & amp; & amp; en lugar de ; que detendrá la ejecución en el primer comando que devuelve un valor distinto de cero. Esto puede o no ser deseado (y algunos comandos pueden devolver un valor distinto de cero en caso de éxito), pero si está tratando de manejar comandos que pueden fallar, probablemente no debería encadenar varios comandos en una llamada al sistema () ya que no tiene cualquier forma de determinar dónde ocurrió la falla. En este caso, su mejor apuesta sería ejecutar un comando a la vez o crear un script de shell que realice el manejo de errores adecuado y llamar a ese lugar.

Otros consejos

Use & amp; & amp; entre tus comandos Tiene la ventaja de que solo continúa ejecutando comandos siempre que devuelvan códigos de error exitosos. Ejemplo:

" cd / proc & amp; & amp; cat cpuinfo "

Una posibilidad viene inmediatamente a la mente. Puede escribir todos los comandos en un script y luego ejecutarlo con:

system ("cmd.exe /c \"x.cmd\"");

o, ahora que he notado que estás ejecutando en Fedora:

system ("x.sh");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top