Comment utiliser la fonction execl () avec des arguments entrés par un utilisateur en C?
Je peux le faire avec execv(args[0],args)
. Comment puis-je convertir execv () à execl ()?
merci.
execv
et execl
font exactement la même chose, à la différence que execl
est destiné à être utilisé lorsque vous connaissez à l'avance le nombre d'arguments de ligne de commande alors que execv
permet à nombre d'arguments à déterminer dynamiquement.
La fonction plus générale est execv
; execl
est une sorte de raccourci lorsque le nombre d'arguments est connu et permet au programmeur d'éviter de construire le tableau argv[]
.
Quoi qu'il en soit, pour répondre à la question posée, vous devez connaître à l'avance le nombre maximum arguments qui seront transmis au programme comme étant exec
d. Si vous connaissez le nombre maximal d'arguments, vous pouvez préparer à l'avance un appel à execl
pour dérouler le tableau d'arguments.
Supposons que vous ayez:
char * exec_argv [21];
char * exec_pathname;
Les deux appels suivants sont équivalents pour tout contenu légal du tableau d'arguments exec_argv[]
:
execv (exec_pathname, exec_argv);
execl (exec_pathname,
exec_argv [0], exec_argv [1], exec_argv [2], exec_argv [3],
exec_argv [4], exec_argv [5], exec_argv [6], exec_argv [7],
exec_argv [8], exec_argv [9], exec_argv [10], exec_argv [11],
exec_argv [12], exec_argv [13], exec_argv [14], exec_argv [15],
exec_argv [16], exec_argv [17], exec_argv [18], exec_argv [19],
NULL
);
(Le dernier argument de execl
est NULL
au lieu de exec_argv[20]
car gcc
le recherchera s'il est appelé avec -Wall
; puisqu'il y a doit être un NULL
quelque part dans exec_args[]
cela n'introduit aucune différence dans les effets des deux appels de fonction.)