Comment appeler execlp()
avec un nombre variable d'arguments pour différents processus?Comment appeler une fonction avec un nombre variable de paramètres?
Répondre
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);
Cela répond seulement titre de la question
de Wikipedia Couvre 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 argumen ts, appelez simplement:
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 veux-tu faire exactement? Vous pouvez probablement variadic macro:
#define myfind(...) execlp("find", "find", __VA_ARGS__)
Ceci est un exemple assez inutile, mais sans le savoir plus précisément ce que vous vouliez faire, c'est tout ce que je pouvais venir avec
Ce n'est pas la syntaxe des macros variadiques C99 (standard). Pourquoi continuer à l'utiliser? –
Désolé pour cela, quelle est la syntaxe alors? – shodanex
Pourquoi ne pas simplement utiliser 'execvp' si le nombre d'arguments peut varier à l'exécution? –