2010-07-25 21 views
7

Soy un principiante de C++.Dónde puedo aprender cómo hacer que un programa C++ interactúe con el sistema operativo (Linux)

Me gustaría crear pequeños programas que interactúen con el sistema operativo (usando Kubuntu Linux). Hasta el momento, no he podido encontrar ningún tutorial o manual para hacer que C++ interactúe con el sistema operativo.

En PHP, puedo usar el comando exec() o el operador backtick para ejecutar comandos ejecutados típicamente en una consola. ¿Cómo puedo hacer cosas similares en C++? ¿Cómo puedo obtener mi programa C++ para ejecutar cualquier otro comando? ¿Cómo puedo obtener la salida de dichos comandos?

Gracias.

Respuesta

6

se puede utilizar el comando system() en stdlib para ejecutar comandos del sistema:

#include <stdlib.h> 
int main() { 
    system("ls -l"); 
} 

system() devuelve un int como su valor de retorno, pero el valor de la int es dependiente del sistema. Si intentas utilizar un comando que no existe, obtendrás el resultado estándar "no such such command" y generalmente un valor de retorno distinto de cero. (Por ejemplo, ejecutando system("ls -l"); en mi máquina con Windows XP aquí devuelve un valor de 1.

+0

Gracias por el código de muestra y el puntero a la biblioteca adecuada. Eso fue muy útil. +1 – augustin

+0

Consideré marcar una de las respuestas como la "correcta". Estaba al tanto de la marca de verificación. Sin embargo, las tres respuestas fueron útiles y cada una agregó información adicional que las otras dos no tenían, por lo que dudaba sobre cuál elegir. Pero si ayuda al sistema, iré con su recomendación. Es una pena que pueda elegir los tres :) – augustin

+0

Gracias. La respuesta perfecta para mí – LinuxBill

7

Puede usar system() para ejecutar comandos arbitrarios pero, si desea controlar fácilmente la entrada y la salida con el programa, debe considerar popen().

Porque aun más control, puede mirar en hacer exactamente lo que una cáscara podría hacer, la creación de algunos descriptores de ficheros adicionales, que se bifurcan a iniciar otro proceso, la creación de descriptores de archivo 0, 1 y 2 (entrada, salida y error) en ese proceso para conectarlos a los descriptores de archivos de proceso originales y luego ejecutar el programa que desea controlar. Esto no es para corazones débiles :-)

+0

Gracias por mencionar popen(). Ahora que sé qué buscar, he podido encontrar más recursos en la web (por ejemplo, http://www.gidforums.com/t-3369.html). Me gustaría poder probar pronto lo que "no es para los débiles" :) +1 – augustin

2

Puede usar system() como se indicó anteriormente o puede usar las bibliotecas que proporcionan acceso a la API POSIX estándar. unistd.h y The GNU C Library incluyen muchas funciones para la interacción del sistema operativo. Las posibilidades con estas bibliotecas son infinitas ya que usted mismo puede implementar las funcionalidades. Un ejemplo simple: escanee un directorio para archivos de texto con scandir() e imprima el contenido de los archivos.

+0

Gracias por los indicadores adicionales a otras bibliotecas. Estoy empezando con algo muy simple, y he marcado esas librerías para cuando necesito expandir aún más lo que puedo hacer. +1 – augustin

Cuestiones relacionadas