Pregunta

Soy bastante nuevo en OCaml y estaba tratando de encontrar la manera de llamar a un programa externo desde dentro OCaml.

He estado siguiendo la documentación aquí , y hacer la siguiente llamada:

Unix.execv "cat text_file";;

Esto devuelve lo siguiente:

string array -> 'a = <fun>

¿Cómo funciona exactamente accedo a la función anónima vuelto?

cat text_file es una simple tentativa de imprimir el contenido del archivo, el comando realmente quiero correr es un poco más compleja. Sin embargo, supongo que si puedo conseguir este espectáculo de correr, yo debería ser capaz de conseguir mi programa en ejecución real.

¿Fue útil?

Solución

El primer argumento de execv es el programa que desea ejecutar y la segunda es una matriz que contiene los argumentos. Además, execv requiere la ruta completa al programa; puede utilizar execvp para buscar el programa en el camino de ejecución. Además, el primer argumento del programa es el nombre del programa en sí. Por lo que desea "/bin/cat" como primer argumento, no "cat text_file" y [| "cat"; "text_file" |] como segundo argumento (o execvp llamada y pasar "cat" como primer argumento).

Sin embargo, más a menudo que no desea realmente system, no execv.

Tenga en cuenta que system le permite pasar una sola cadena como usted quiere y que execv (a diferencia de system), nunca vuelve, es decir, una vez que se llama a execv su programa está hecho y la aplicación que se hace cargo de invocar el proceso.

Otros consejos

Además de lo que dijo sepp2k, es posible que desee ver en el uso create_process (por Unix.file_descr) o open_process (para canales). Estas funciones hacen un tenedor / exec y redirigir la E / S para el proceso. De esa manera usted puede comunicarse con el proceso, que no se puede hacer con system.

Si desea leer la salida de cat en su programa, puede crear una tubería usando la función pipe y, a continuación, utilizar los file_descrs devueltos por create_process.

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