C - Передача va_list в функцию, оканчивающуюся на страже - нужна оболочка для execlp () - PullRequest
2 голосов
/ 28 июля 2011

Я пытаюсь написать оболочку для execlp ().Почему это не работает?Это страж?

int vExeclp(const char *file, const char *arg, va_list argptr)
{
  int returnValue = 0;

  returnValue = execlp(file, arg, argptr, NULL);

  // error handling if returnValue == -1

  return(returnValue);
}


int Execlp(const char *file, const char *arg, ...)
{
    int returnValue = 0;
    va_list argptr;

    va_start(argptr, arg);

    returnValue = vExeclp(file, arg, argptr);

    va_end(argptr);

    return(returnValue);
}

Заранее спасибо за любые ответы!

Ответы [ 2 ]

3 голосов
/ 28 июля 2011

execlp - это переменная функция , поэтому вы не можете создать оболочку для нее.Вам нужно будет вызвать execvp, передавая строки массива, созданные путем итерации по вашему va_list.

1 голос
/ 28 июля 2011

Вы не можете передать va_list в функцию с переменными числами;это просто не работает таким образом.Единственное, что вы можете сделать, это прочитать список аргументов в массив самостоятельно, пока не дойдете до нулевого терминатора, а затем передать массив в execvp.

...