如何execlp()
为不同的进程调用可变数量的参数?
问问题
3018 次
4 回答
10
如果您在编写代码时不知道需要多少个参数,您想使用 execvp(),而不是 execlp():
char **args = malloc((argcount + 1) * sizeof(char *));
args[0] = prog_name;
args[1] = arg1;
...
args[argcount] = NULL;
execvp(args[0], args);
于 2010-01-21T08:05:25.183 回答
1
这仅回答标题问题
来自维基百科 涵盖新旧风格
#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;
}
于 2010-01-21T08:05:36.103 回答
0
execlp()
可以用变量号或参数调用,所以只需调用:
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);
于 2010-01-21T08:07:50.077 回答
0
execlp 已经作为可变数量的参数。你到底想做什么?您可能可以使用可变参数宏:
#define myfind(...) execlp("find", "find", __VA_ARGS__)
这是一个相当无用的例子,但在不知道你想要做什么的情况下,这就是我能想到的全部
于 2010-01-21T08:09:45.007 回答