Question

Je suis assez nouveau pour OCaml et essayait de comprendre comment appeler un programme externe depuis OCaml.

J'ai suivi la documentation et faire l'appel suivant:

Unix.execv "cat text_file";;

renvoie les éléments suivants:

string array -> 'a = <fun>

Comment puis-je exactement accéder à la fonction anonyme de retour?

cat text_file est une tentative simple d'imprimer le contenu du fichier, la commande que je veux vraiment courir est un peu plus complexe. Cependant, je suppose que si je peux obtenir cette course, je devrais être en mesure d'obtenir mon fonctionnement réel du programme.

Était-ce utile?

La solution

Le premier argument de execv est le programme que vous souhaitez exécuter et le second est un tableau contenant les arguments. , execv exige également le chemin complet du programme; vous pouvez utiliser execvp pour rechercher le programme dans le chemin d'exécution. En outre, le premier argument au programme est le nom du programme lui-même. Donc, vous voulez "/bin/cat" comme premier argument, non "cat text_file" et [| "cat"; "text_file" |] comme second argument (ou execvp d'appel et passer "cat" comme premier argument).

Cependant, plus souvent qu'autrement, vous voulez vraiment system, pas execv.

Notez que system vous permet de passer une seule chaîne comme vous voulez et que execv (contrairement system) ne retourne jamais, à savoir une fois que vous appelez execv votre programme est fait et l'application que vous invoquez prend en charge le processus.

Autres conseils

En plus de ce que dit sepp2k, vous voudrez peut-être regarder dans create_process (pour Unix.file_descr) ou open_process (pour les canaux). Ces fonctions font une fourchette / exec et réexpédie le i / o du processus. De cette façon, vous pouvez communiquer avec le processus, que vous ne pouvez pas faire avec system.

Si vous voulez lire la sortie de cat dans votre programme, vous pouvez créer un tuyau à l'aide de la fonction pipe, puis utilisez les file_descrs retournés pour create_process.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top