Wie rufe ich eine Funktion mit einer variablen Anzahl von Parametern auf?
-
22-09-2019 - |
Frage
Wie rufe ich an execlp()
Mit einer variablen Anzahl von Argumenten für verschiedene Prozesse?
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