Mardi 5 février 2006 |
execvp
qui
exécute une commande avec ses arguments dans un autre processus et qui
permet de récupérer, à terme, le résultat de la commande dans le
processus courant sous la forme d'une liste de chaînes de caractères
contenant les lignes retournées par la commande sur sa sortie
standard./tmp/foo
.do_not_interrupt
qui prend deux arguments f et x et effectue l'appel f x en le relançant
s'il a été interrompu. input_lines
qui lit des
lignes sur un in_channel
passé en argument et les place au fur et à
mesure dans une liste, puis renvoie cette dernière.
On utilisera la fonction input_line
qui est protégée contre
l'arrivée des signaux pour lire les lignes.execvp_to_list
qui prend en argument le nom de la
commande à exécuter ainsi qu'un tableau contenant ses arguments. Cette
fonction utilise un tube pour lire les résultats envoyés par la
commande sur sa sortir standard et attend la terminaison du fils avant
de retourner.input_lines
et do_not_interrupt
écrites plus haut et les
fonctions fork
, dup2
, execvp
, waitpid
in_channel_of_descr
et close_in
de la bibliothèque Unix.
execvp_from_list lines cmd args
qui exécute la commande cmd
avec les arguments args
et envoie sur
son entrée standard la liste de lignes lines
. Attention à la levée
du signal sigpipe
en cas d´écriture sur un descripteur fermé.pipeline
qui prend, sur la ligne de commande, une suite de
sous-commandes séparées par :
et les exécute en pipeline.
Par exemple :
./pipeline grep foo : grep bar : wc -l |
foo
et le mot
bar
, de façon comparable à la commande
/bin/sh -c 'grep foo | grep bar | wc -l' |
bash$ grep foo | grep bar | wc |
pipeline
qui prend une liste de couples
(cmd, args)
et qui redirige la sortie standard de la première
commande vers l'entrée de la seconde et ainsi de suite. pipeline [ "grep", [| "foo" |]; "grep", [| "bar" |]; "wc", [| "-l" |] ] |
wait_for_children
(i.e. qui
ne peut rien supposer sur le contexte dans lequel elle est appelée)
qui prend une liste de processus (fils du processus courant), attend leur
terminaison et retourne un entier correspondant à un “ou logique”
(opérateur binaire lor
)
sur les valeurs de retour de chacune des commandes qui se sont terminées.
La valeur 127 sera retournée si l'un des fils se termine suite à l'arrivée
d'un signal.
end_pipeline input cmd args
qui lance la
commande de nom cmd
avec les arguments présents dans le tableau
args
et retourne le pid du fils. L'entrée standard de la commande sera au
préalable redirigée sur le descripteur input
.
(On pensera à bien fermer tous les descripteurs inutiles.)
pipeline_with input cmd args
qui lance la
commande de nom cmd
avec les arguments présents dans le tableau args
.
L'entrée standard de la commande sera au préalable redirigée sur le
descripteur input
et sa sortie standard vers un tube dont le
descripteur en lecture est retourné par la fonction pipeline_with
;
le pid du processus créé sera également retourné.pipeline cmd_list
qui prend en argument
une liste de couples (commande, arguments) à exécuter en « chaîne » et
retourne la valeur de retour calculée par la fonction wait_for_children
.fork
échoue, l'erreur est fatale.
fork
?
pipeline
.
type redirection = In_from_file of string (* < file *) | Out_to_file of string (* > file *) | Err_to_file of string (* 2> file *) | Out_append_to_file of string (* >> file *) | Err_to_out ;; (* 2>&1 *) |
command_fg_redirect
qui prend en argument
une commande, ses arguments sous forme d'un tableau et une liste de
redirections et qui exécute la commande après avoir effectué les
redirections nécessaires puis attend sa terminaison.cat
[||] [ In_to_file
input
; Out_append_file output
] redirige l'entrée standard de
la commande cat
vers le fichier de nom input
et la sortie standard
vers le fichier de nom output
./tmp/foo
; Err_to_out] redirige la sortie standard et la sortie
d'erreur vers le fichier /tmp/foo
et command_fg_redirect
cmd [||] [ Err_to_out ; Out_to_file /tmp/foo
] redirige la
sortie d'erreur vers le stdout
d'origine et redirige stdout
vers
/tmp/foo
.Unix.fork
, Unix.dup2
, Unix.dup2
, Unix.openfile
et
Unix.close
.This document was translated from LATEX by HEVEA and HACHA.