Frage

Wie rufe ich an execlp() Mit einer variablen Anzahl von Argumenten für verschiedene Prozesse?

War es hilfreich?

Lösung

Wenn Sie nicht wissen, wie viele Argumente Sie zum Zeitpunkt des Schreibens Ihres Codes benötigen, möchten Sie execVP (), nicht execlp () verwenden:

char **args = malloc((argcount + 1) * sizeof(char *));
args[0] = prog_name;
args[1] = arg1;
...
args[argcount] = NULL;

execvp(args[0], args);

Andere Tipps

Dies beantwortet nur die Titelfrage

Aus WikipediaDeckt alte und neue Stile ab

#include <stdio.h>
#include <stdarg.h>

void printargs(int arg1, ...) /* print all int type args, finishing with -1 */
{
  va_list ap;
  int i;

  va_start(ap, arg1); 
  for (i = arg1; i != -1; i = va_arg(ap, int))
    printf("%d ", i);
  va_end(ap);
  putchar('\n');
}

int main(void)
{
   printargs(5, 2, 14, 84, 97, 15, 24, 48, -1);
   printargs(84, 51, -1);
   printargs(-1);
   printargs(1, -1);
   return 0;
}

execlp() Kann mit variabler Nummer oder Argumenten aufgerufen werden, rufen Sie also einfach an:

int ret;
ret = execlp("ls", "ls", "-l", (char *)0);
ret = execlp("echo", "echo", "hello", "world", (char *)0);
ret = execlp("man", "man", "execlp", (char *)0);
ret = execlp("grep", "grep", "-l", "pattern", "file1", "file2", (char *)0);

EXECLP bereits als variable Anzahl von Parametern. Was möchten Sie genau tun? Sie können wahrscheinlich a Variadische Makro :

#define myfind(...) execlp("find", "find", __VA_ARGS__)

Dies ist ein ziemlich nutzloses Beispiel, aber ohne genau das zu wissen, was Sie tun wollten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top