How do I call execlp() with a variable number of arguments for different processes?
4 Answers
This answers only the title question
From Wikipedia Covers old and new 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;
}
Comments
execlp() can be called with variable number or arguments, so just call:
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);
Comments
Execlp already as a variable number of parameters. What do you want to do exactly ? You can probably a variadic macro :
#define myfind(...) execlp("find", "find", __VA_ARGS__)
This is a rather useless example, but without knowing more precisely what you wanted to do, that's all I could come up with
2 Comments
Chris Lutz
That's not the syntax for (standard) C99 variadic macros. Why continue to use it?
shodanex
Sorry for this, what is the syntax then ?
execvpif the number of arguments can vary at runtime?