Comment puis-je appeler une fonction avec un nombre variable de paramètres?
-
22-09-2019 - |
Question
Comment puis-je appeler execlp()
avec un nombre variable d'arguments pour les différents processus?
La solution
Si vous ne savez pas combien d'arguments que vous aurez besoin au moment où vous écrivez votre code, vous souhaitez utiliser execvp (), non execlp ():
char **args = malloc((argcount + 1) * sizeof(char *));
args[0] = prog_name;
args[1] = arg1;
...
args[argcount] = NULL;
execvp(args[0], args);
Autres conseils
Cela répond que la question de titre
De Wikipedia Covers anciens et nouveaux styles
#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()
peut être appelé avec un nombre variable ou arguments, donc il suffit d'appeler:
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 déjà comme un nombre variable de paramètres. Que voulez-vous faire exactement? Vous pouvez probablement variadique macro :
#define myfind(...) execlp("find", "find", __VA_ARGS__)
Ceci est un exemple plutôt inutile, mais sans le savoir plus précisément ce que vous vouliez faire, qui est tout ce que je pouvais venir avec