¿Cómo puedo ejecutar un comando de línea de comandos desde un programa C++?

2 minutos de lectura

Avatar de usuario de Angel Dream
ángel sueño

¿Cómo puedo ejecutar la línea de comando “asterisk -rx”reload”” en c++? Por favor ayuda. Necesito un ejemplo. Estoy trabajando en el servidor ubuntu y quiero ejecutar esta línea de comando desde un usuario (dentro de un servicio web).

Necesito ayuda Agradezco

  • ¿Realmente quiso decir C++/CLI, o malinterpretó la etiqueta? [c++-cli] para significar “interfaz de línea de comando C ++”? ¿Existe realmente una implementación de C++/CLI para Linux?

    – celtschk

    12 de enero de 2012 a las 9:07

avatar de usuario de unwind
relajarse

Suena como un caso de uso trivial para el system() función:

system("asterisk -rx reload");

Si necesita un control muy detallado del proceso secundario, hay mejores formas, pero esto es fácil de comenzar.

Esta llamada inicia un shell (como bash) para ejecutar el comando, por lo que eliminé las comillas alrededor reload; no tienen sentido para una sola palabra y serán eliminados por el shell y nunca vistos por el programa iniciado, de todos modos.

  • Esto es bueno, un método alternativo podría ser fork/exec to (requiere más esfuerzo pero más potente en general)

    – sueño relajado

    12 de enero de 2012 a las 9:03

  • lo probé byt no está funcionando

    – Sueño de ángel

    12 de enero de 2012 a las 10:36

  • Tengo un servicio web en un servidor y trato de llamar a este método desde el usuario, pero el asterisco no se recarga. ¿por qué? necesito ayuda por favor

    – Sueño de ángel

    12 de enero de 2012 a las 10:37

  • @AngelDream: El programa que llama al system La función debe tener los privilegios correctos para ejecutar la asterisk programa. Por ejemplo, si su programa se ejecuta como un usuario normal, pero asterisk requiere un usuario root, entonces el system la llamada no funcionará porque su programa no puede ejecutarse asterisk.

    – sueño relajado

    12 de enero de 2012 a las 20:39

Avatar de usuario de Alex Reynolds
alex reynolds

system("asterisk -rx \"reload\"") probablemente funcionaría, si no necesita una salida estándar o un error del proceso.

Si necesita resultados del proceso, aquí hay un ejemplo del uso de C popen()o podrías mirar Boost.Proceso para un enfoque C++.

¿Ha sido útil esta solución?