5

execlp()さまざまなプロセスに対して可変数の引数を使用して呼び出すにはどうすればよいですか?

4

4 に答える 4

10

コードを書いている時点で必要な引数の数がわからない場合は、execlp() ではなく execvp() を使用します。

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 に答える