system() se usa para invocar un comando del sistema operativo desde un programa C/C++.
int system(const char *command);
Nota: es necesario incluir stdlib.h o cstdlib para llamar al sistema.
Usando system(), podemos ejecutar cualquier comando que pueda ejecutarse en la terminal si el sistema operativo lo permite. Por ejemplo, podemos llamar al sistema («dir») en Windows y al sistema («ls») para enumerar el contenido de un directorio.
¿Escribir un programa C/C++ que compila y ejecuta otro programa?
Podemos invocar gcc desde nuestro programa usando system(). Vea a continuación el código escrito para Linux. Podemos cambiar fácilmente el código para que se ejecute en Windows.
// A C++ program that compiles and runs another C++ // program #include <bits/stdc++.h> using namespace std; int main () { char filename[100]; cout << "Enter file name to compile "; cin.getline(filename, 100); // Build command to execute. For example if the input // file name is a.cpp, then str holds "gcc -o a.out a.cpp" // Here -o is used to specify executable file name string str = "gcc "; str = str + " -o a.out " + filename; // Convert string to const char * as system requires // parameter of type const char * const char *command = str.c_str(); cout << "Compiling file using " << command << endl; system(command); cout << "\nRunning file "; system("./a.out"); return 0; }
system() frente al uso de funciones de biblioteca:
algunos usos comunes de system() en el sistema operativo Windows son, system («pausa»), que se usa para ejecutar el comando de pausa y hacer que la pantalla/terminal espere a que se presione una tecla, y system («cls ”) que se utiliza para aclarar la pantalla/terminal.
Sin embargo, debe evitarse realizar una llamada al comando del sistema debido a las siguientes razones:
- Es una llamada de función muy costosa y con muchos recursos.
- No es portátil : el uso de system() hace que el programa no sea portátil, es decir, esto funciona solo en sistemas que tienen el comando de pausa a nivel de sistema, como DOS o Windows. Pero no Linux, MAC OSX y la mayoría de los demás.
Tomemos un código C++ simple para generar Hello World usando el sistema («pausa») :
// A C++ program that pauses screen at the end in Windows OS #include <iostream> using namespace std; int main () { cout << "Hello World!" << endl; system("pause"); return 0; }
La salida del programa anterior en el sistema operativo Windows:
Hello World! Press any key to continue…
Este programa depende del sistema operativo y utiliza los siguientes pasos pesados.
- Suspende su programa y simultáneamente llama al sistema operativo para abrir el shell del sistema operativo.
- El sistema operativo encuentra la pausa y asigna la memoria para ejecutar el comando.
- Luego desasigna la memoria, sale del sistema operativo y reanuda el programa.
En lugar de usar el sistema («pausa»), también podemos usar las funciones que se definen de forma nativa en C/C++.
Tomemos un ejemplo simple para generar Hello World con cin.get():
// Replacing system() with library function #include <iostream> #include <cstdlib> using namespace std; int main () { cout << "Hello World!" << endl; cin.get(); // or getchar() return 0; }
La salida del programa es:
Hello World!
Por lo tanto, vemos que tanto el sistema («pausa») como cin.get() en realidad están esperando a que se presione una tecla, pero cin.get() no depende del sistema operativo y tampoco sigue los pasos mencionados anteriormente. para pausar el programa.
De manera similar, en lenguaje C, getchar() se puede usar para pausar el programa sin imprimir el mensaje «Presione cualquier tecla para continuar…».
¿Una forma común de verificar si podemos ejecutar comandos usando system() en un sistema operativo?
Si pasamos un puntero nulo en lugar de una string para el parámetro de comando, el sistema devuelve un valor distinto de cero si existe un procesador de comandos (o si el sistema puede ejecutarse). De lo contrario devuelve 0.
// C++ program to check if we can run commands using // system() #include <iostream> #include <cstdlib> using namespace std; int main () { if (system(NULL)) cout << "Command processor exists"; else cout << "Command processor doesn't exists"; return 0; }
Tenga en cuenta que es posible que los programas anteriores no funcionen en el compilador en línea, ya que el comando del sistema está deshabilitado en la mayoría de los compiladores en línea, incluido GeeksforGeeks IDE .
Este artículo es una contribución de Subhankar Das. Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo electrónico a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA