9.6 Llamadas al Sistema
En ocasiones es necesario
realizar alguna llamada al sistema desde un programa C++. Por ejemplo, para iniciar otro programa; un proceso por
lotes, etc. Aunque el Estándar C++ no dispone de esta utilidad, la mayoría de los compiladores cuentan con una
función que permite invocar al intérprete de comandos CLI ("Command Line Interpreter") desde el interior de un
programa.
Tanto los compiladores Borland C++ 5.5 como MS Visual C++ 6.0 disponen de la función system() que permite realizar llamadas al sistema (consulte el manual del compilador). En el siguiente ejemplo se muestra un programa que construye un fichero de texto contenido.txt con los datos de los ficheros *.htm de un cierto directorio.
Observe la secuencia de escape \\
( 3.2.3e)
utilizada para indicar el carácter \.
// Ejemplo de invocación al Sistema
int main() // ============
system("dir D:\\ZWeb\\ZatorH\\Cpp\\*.htm >
contenido.txt");
return 0;
}
Contenido (parcial) del fichero obtenido al ejecutar el programa anterior en un sistema Windows:
El volumen de la unidad D no tiene etiqueta
El n£mero de serie del volumen es 3150-1004
Directorio de D:\ZWeb\ZatorH\Cpp
E0_1 HTM 40.475
30/06/03 18:11 E0_1.htm
E0_1w1 HTM 3.159
27/06/03 12:52 E0_1w1.htm
E0_2 HTM 45.363
12/07/03 12:12 E0_2.htm
E0_3 HTM
2.312 30/06/03 18:21 E0_3.htm
E0_I HTM 17.010
02/07/03 23:53 E0_I.htm
E0_Iw1 HTM 3.739
30/06/03 18:38 E0_Iw1.htm
E0_Iw2 HTM 3.889
30/06/03 18:24 E0_Iw2.htm
E0_P HTM 10.585
30/06/03 18:25 E0_P.htm
...
E4_11~26 HTM
7.338 04/07/03 9:59 E4_11_2a3.htm
E4_11~27 HTM 66.172 16/07/03 0:52
E4_11_2b-1.htm
403 archivos 7.491.668 bytes
0 directorios 1.402.118.144 bytes libres
Si realizamos aplicaciones de
consola desde un entorno gráfico como Windows (como los ejercicios que se proponen en este manual), puede ser buena idea
terminar la función main con una llamada al sistema pidiendo que espere. De esta forma garantizamos que la
ventana no se cerrará al terminar la ejecución, dándonos tiempo para ver los resultados. Hay dos posibilidades:
#include <iostream>
int main(int argc, char *argv[]) {
...
system("PAUSE"); // -> Presione cualquier tecla para continuar . . .
return EXIT_SUCCESS;
}
#include <iostream>
#include <stdio.h>
int main(int argc, char *argv[]) {
...
std::cout << "Pulsar INTRO para terminar" << std::endl;
getchar ();
return EXIT_SUCCESS;
}