web-dev-qa-db-fra.com

execl () arguments

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.

1
Duygu Yılmaz

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 execd. 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.)

1
AlexP