Pregunta

Estoy utilizando execv() para ejecutar comandos de / bin / como 'ls', 'pwd', 'eco' de mi programa en C ++, y me pregunto qué valor debería proporcionar en argv [0];

const char * path = getPath();
char ** argv = getArgs();

execv(path,argv);
¿Fue útil?

Solución

argv[0] se supone que es el nombre del programa. Se transmite a la función main del programa. Algunos programas de diferenciar su comportamiento en función de lo argv[0] cuerda. Por ejemplo la cáscara bash GNU desactivará algunas de sus características si se llama usando sh en lugar de bash. Mejor que dan el mismo valor que se pasa a path.

En Linux, argv[0] es el nombre del proceso está representada por la utilidad top (que probablemente obtiene de la lectura de entradas en /proc/)

Otros consejos

argv [0] debe ser la ruta completa del comando que desea ejecutar.

Sé que esto no es la respuesta que está buscando, pero hay una razón específica por qué estás haciendo esto? La razón que pido es que la mayoría, si no todas las personas que las acciones funciona con normalidad, ya sea system() o execv() están disponibles en las bibliotecas de Windows o Unix y son más seguro, más rápido y menos propensos a sufrir de circunstancial errores . Con esto quiero decir, por ejemplo, cuando los cambios PATH y de repente su código deja de funcionar.

Si va a ceder en una cadena, ya sea en su totalidad o en parte, y ejecutarlo, entonces también dejarse abierto a un usuario para acceder al sistema mediante la introducción de un comando que podría ser perjudicial. P.ej. Imagínese que usted ha implementado una búsqueda de archivos utilizando find /home -name y sus tipos de usuario en:

"%" -exec rm {} \;

¡Ay!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top