it-swarm.com.de

execl () Argumente

Wie kann ich die execl () - Funktion mit Argumenten verwenden, die von einem Benutzer in C eingegeben wurden?

Ich kann es mit execv(args[0],args) tun. Wie kann ich execv () in execl () konvertieren?

vielen Dank.

1
Duygu Yılmaz

execv und execl machen genau dasselbe, mit dem Unterschied, dass execl für die Verwendung vorgesehen ist, wenn Sie die Anzahl der Befehlszeilenargumente im Voraus kennen, während execv ] _ ermöglicht die dynamische Bestimmung der Anzahl der Argumente.

Die allgemeinere Funktion ist execv; execl ist eine Art Kurzform, wenn die Anzahl der Argumente bekannt ist, und ermöglicht es dem Programmierer, die Erstellung des Arrays argv[] zu vermeiden.

Wie auch immer, um die gestellte Frage zu beantworten: Sie müssen im Voraus die maximale Anzahl der Argumente kennen, die an das Programm übergeben werden, um execd zu sein. Wenn Sie die maximale Anzahl von Argumenten kennen, können Sie im Voraus einen Aufruf von execl vorbereiten, um das Argument-Array zu entfernen.

Angenommen, Sie haben:

char * exec_argv [21];
char * exec_pathname;

Die folgenden beiden Aufrufe sind für alle zulässigen Inhalte des Argumentarrays exec_argv[] Gleichbedeutend:

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
);

(Das letzte Argument von execl ist NULL anstelle von exec_argv[20], Da gcc danach sucht, wenn es mit -Wall Aufgerufen wird; da - muss irgendwo in exec_args[] ein NULL sein, dies führt zu keinem Unterschied in den Auswirkungen der beiden Funktionsaufrufe.)

1
AlexP